/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package RRHH_controlador;

import CONTABILIDAD_MODELO.CON_DATOS_EMPRESA;
import CONTABILIDAD_MODELO.CON_MONEDA;
import CONTABILIDAD_MODELO.CON_PLANILLA_EMPLE_APRO;
import Conexion.Conexion;
import RRHH_Modelo.RHH_BONO_ANTIGUEDAD;
import RRHH_Modelo.RHH_BONO_USUARIO;
import RRHH_Modelo.RHH_CREDITO_FISCAL;
import RRHH_Modelo.RHH_DEPARTAMENTO;
import RRHH_Modelo.RHH_DEUDA;
import RRHH_Modelo.RHH_EVENTOS_HITO;
import RRHH_Modelo.RHH_FECHAS_HITO;
import RRHH_Modelo.RHH_PAGOS_QUINCENA;
import RRHH_Modelo.RHH_PAGOS_QUINCENA_CABECERA;
import RRHH_Modelo.RHH_PERSONA;
import RRHH_Modelo.RHH_PLANILLA_CELULAR;
import RRHH_Modelo.RHH_PLANILLA_PROVISION_EMPLE;
import RRHH_Modelo.RHH_PLANILLA_PROVISION_EMP_CAB;
import RRHH_Modelo.RHH_PLANILLA_RETROACTIVOS;
import RRHH_Modelo.RHH_PLANILLA_RETROACTIVO_CABE;
import RRHH_Modelo.RHH_PROFESION;
import RRHH_Modelo.RHH_REGIONAL;
import RRHH_Modelo.RHH_SALARIO_MINIMO;
import RRHH_Modelo.RHH_SUCURSAL;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@MultipartConfig
@WebServlet(name = "RRHH_PLANILLA_PROVISION_EMPLEADO_CONTROLLER", urlPatterns = {"/RRHH_PLANILLA_PROVISION_EMPLEADO_CONTROLLER"})
public class RRHH_PLANILLA_PROVISION_EMPLEADO_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet RRHH_PLANILLA_EMPLEADO_CONTROLLER</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet RRHH_PLANILLA_EMPLEADO_CONTROLLER at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs.76695331
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));                     
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());            
            String evento = request.getParameter("evento");
            String html="";
            switch(evento)
            {                
                case "modificar":
                    html=modificar(request,con);
                    break;               
                case "ModificarFila":
                    html=ModificarFila(request,con);
                    break;
                case "pop_profecion":
                    html=pop_profecion(request,con);
                    break;
                case "recargar":
                    html=recargar(request,con);
                    break;
                case "generar":
                    html=generar(request,con);
                    break;                
                case "cargar":
                    html=cargar(request,con);
                    break;
                case "cargar_mod":
                    html=cargar_mod(request,con);
                    break;
                case "aperturar_planilla":
                    html=aperturar_planilla(request,con);
                    break;                            
            }
            
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
            con.Close();
        } catch (SQLException ex) {
            Logger.getLogger(RRHH_PLANILLA_PROVISION_EMPLEADO_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParseException ex) {
            Logger.getLogger(RRHH_PLANILLA_PROVISION_EMPLEADO_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String cargar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));        
        // <editor-fold defaultstate="collapsed" desc="HEAD">  
        String html="{\"tabla\":\"<thead>";
        html+="<tr>";
        html+="<th rowspan='2'>CI</th>";
        html+="<th rowspan='2'>LUGAR DE EMISION</th>";
        html+="<th rowspan='2'>PRIMER NOMBRE</th>";
        html+="<th rowspan='2'>SEGUNDO NOMBRE</th>";
        html+="<th rowspan='2'>PRIMER APELLIDO</th>";
        html+="<th rowspan='2'>SEGUNDO APELLIDO</th>";
        html+="<th rowspan='2'>TELEFONO</th>";
        html+="<th rowspan='2'>EMAIL</th>";
        html+="<th rowspan='2'>PROFESION</th>";
        html+="<th rowspan='2'>FECHA CONTRATACION</th>";
        html+="<th rowspan='2'>FECHA RETIRO</th>";
        html+="<th rowspan='2'>MOTIVO RETIRO</th>";        
        html+="<th rowspan='2'>OBSERVACION</th>";        
        html+="<th colspan='3'>ANTIGUEDAD</th>";
        html+="<th rowspan='2'>CARGO</th>";
        html+="<th rowspan='2'>DEPARTAMENTO</th>";
        html+="<th rowspan='2'>REGIONAL</th>";
        html+="<th rowspan='2'>SUCURSAL</th>";        
        html+="<th rowspan='2'>SALARIO BASICO</th>";        
        html+="<th rowspan='2'>INREMENTO SALARIAL</th>";                
        html+="<th rowspan='2'>DIAS MES</th>";        
        html+="<th rowspan='2'>DIAS TRABAJADOS</th>";
        html+="<th rowspan='2'>SUELDO ACTUAL</th>";
        html+="<th rowspan='2'>SALARIO DIAS TRABAJADOS</th>";
        html+="<th rowspan='2'>BONO ANTIGUEDAD</th>";
        html+="<th rowspan='2'>OTROS INGRESOS</th>";
        html+="<th rowspan='2'>OTROS INGRESOS NO IMPONIBLES</th>";
        html+="<th rowspan='2'>TOTAL GANADO + NO IMPONIBLES</th>";
        html+="<th rowspan='2'>TOTAL GANADO</th>";        
        html+="<th rowspan='2'>MONTO PAGADO DE QUINCENA</th>";
        html+="<th rowspan='2'>ANTICIPO</th>";
        html+="<th rowspan='2'>ATRASOS</th>";
        html+="<th rowspan='2'>FALTAS</th>";        
        html+="<th rowspan='2'>SANCIONES</th>";
        html+="<th rowspan='2'>DEUDA CELULAR</th>";
        html+="<th rowspan='2'>DESCUENTOS</th>";
        html+="<th colspan='6'>APORTE LABORAL</th>";        
        html+="<th colspan='5'>APORTE PATRONAL</th>";                
        html+="<th rowspan='2'>SUELDO NETO SUJETO A IMPUESTOS</th>";
        html+="<th rowspan='2'>MINIMO NO IMPONIBLE</th>";
        html+="<th rowspan='2'>DIFERENCIA SUJETA A IMPUESTOS</th>";
        html+="<th rowspan='2'>IMPUESTO LIQUIDADO</th>";
        html+="<th rowspan='2'>COMPUTO IVA SIN DDJJ</th>";
        html+="<th rowspan='2'>13% SOBRE DOS SALARIOS MINIMOS</th>";
        html+="<th rowspan='2'>SALDO FAVOR IMPUESTOS</th>";
        html+="<th rowspan='2'>SALDO FAVOR EMPLEADO</th>";
        html+="<th rowspan='2'>SALDO MES ANTERIOR</th>";        
        html+="<th rowspan='2'>UFV MES ANTERIOR</th>";
        html+="<th rowspan='2'>UFV ACTUAL</th>";
        html+="<th rowspan='2'>ACTUALIZACION</th>";
        html+="<th rowspan='2'>SUB TOTAL i + j</th>";
        html+="<th rowspan='2'>SALDO TOTAL A FAVOR EMPLEADO</th>";
        html+="<th rowspan='2'>SALDO UTILIZADO</th>";
        html+="<th rowspan='2'>IMPUESTO RETENIDO A PAGAR</th>";
        html+="<th rowspan='2'>SALDO A FAVOR SIGTE MES</th>";
        html+="<th rowspan='2'>TOTAL DESCUENTO MES</th>";
        html+="<th rowspan='2'>TOTAL RETROACTIVO PAGABLE</th>";
        html+="<th rowspan='2'>TOTAL LIQUIDO PAGABLE NO IMPONIBLE</th>";
        html+="<th rowspan='2'>TOTAL LIQUIDO PAGABLE</th>";                
        html+="</tr>";                
        html+="<tr>";             
        html+="<th>DIA</th>";
        html+="<th>MES</th>";
        html+="<th>AÑO</th>";        
        html+="<th>SEGURO LARGO PLAZO</th>";
        html+="<th>RIESGO COMUN</th>";
        html+="<th>COMISION AFP</th>";
        html+="<th>SOLIDARIO ASEGURADO</th>";
        html+="<th>SOLIDARIO NACIONAL</th>";
        html+="<th>TOTAL APORTE LABORAL</th>";
        html+="<th>CSBP</th>";
        html+="<th>RIESGO PROFECIONAL</th>";
        html+="<th>PRO VIVIENDA</th>";
        html+="<th>APORTE SOLIDARIO</th>";
        html+="<th>TOTAL APORTE PATRONAL</th>";
        html+="</tr>";                
        html+="</thead>";
        // </editor-fold>
        html+="<tbody style='width: 100%; height: 500px; overflow-y: auto;'>";

        
        RHH_PLANILLA_PROVISION_EMP_CAB ca = new RHH_PLANILLA_PROVISION_EMP_CAB(con).Buscar(ano, mes);
        List<RHH_PLANILLA_PROVISION_EMPLE> lista_planilla =new RHH_PLANILLA_PROVISION_EMPLE(con).BuscarXfecha(ano, mes);
        if(lista_planilla.size()>0)
        {
            html+=abrirPlanilla(ano, mes, con);
            html+="</tbody>\",\"estado\":\""+ca.getESTADO()+"\",\"estado_impo\":\""+ca.getESTADO_SIN_IMPUESTOS()+"\"}";
        }
        else
        {
            html+=generarPlanilla(ano, mes, con);
            html+="</tbody>\",\"estado\":\"1\",\"estado_impo\":\"1\"}";
        }
                
        
        return html;
    }
    private String cargar_mod(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));        
        // <editor-fold defaultstate="collapsed" desc="HEAD">  
        String html="{\"tabla\":\"<thead>";
        html+="<tr>";
        html+="<th rowspan='2'>CI</th>";
        html+="<th rowspan='2'>LUGAR DE EMISION</th>";
        html+="<th rowspan='2'>PRIMER NOMBRE</th>";
        html+="<th rowspan='2'>SEGUNDO NOMBRE</th>";
        html+="<th rowspan='2'>PRIMER APELLIDO</th>";
        html+="<th rowspan='2'>SEGUNDO APELLIDO</th>";
        html+="<th rowspan='2'>TELEFONO</th>";
        html+="<th rowspan='2'>EMAIL</th>";
        html+="<th rowspan='2'>PROFESION</th>";
        html+="<th rowspan='2'>FECHA CONTRATACION</th>";
        html+="<th rowspan='2'>FECHA RETIRO</th>";
        html+="<th rowspan='2'>MOTIVO RETIRO</th>";        
        html+="<th rowspan='2'>OBSERVACION</th>";        
        html+="<th colspan='3'>ANTIGUEDAD</th>";
        html+="<th rowspan='2'>CARGO</th>";
        html+="<th rowspan='2'>DEPARTAMENTO</th>";
        html+="<th rowspan='2'>REGIONAL</th>";
        html+="<th rowspan='2'>SUCURSAL</th>";        
        html+="<th rowspan='2'>SALARIO BASICO</th>";        
        html+="<th rowspan='2'>INREMENTO SALARIAL</th>";                
        html+="<th rowspan='2'>DIAS MES</th>";        
        html+="<th rowspan='2'>DIAS TRABAJADOS</th>";
        html+="<th rowspan='2'>SUELDO ACTUAL</th>";
        html+="<th rowspan='2'>SALARIO DIAS TRABAJADOS</th>";
        html+="<th rowspan='2'>BONO ANTIGUEDAD</th>";
        html+="<th rowspan='2'>OTROS INGRESOS</th>";
        html+="<th rowspan='2'>OTROS INGRESOS NO IMPONIBLES</th>";
        html+="<th rowspan='2'>TOTAL GANADO + NO IMPONIBLES</th>";
        html+="<th rowspan='2'>TOTAL GANADO</th>";        
        html+="<th rowspan='2'>MONTO PAGADO DE QUINCENA</th>";
        html+="<th rowspan='2'>ANTICIPO</th>";
        html+="<th rowspan='2'>ATRASOS</th>";
        html+="<th rowspan='2'>FALTAS</th>";        
        html+="<th rowspan='2'>SANCIONES</th>";
        html+="<th rowspan='2'>DEUDA CELULAR</th>";
        html+="<th rowspan='2'>DESCUENTOS</th>";
        html+="<th colspan='6'>APORTE LABORAL</th>";        
        html+="<th colspan='5'>APORTE PATRONAL</th>";                
        html+="<th rowspan='2'>SUELDO NETO SUJETO A IMPUESTOS</th>";
        html+="<th rowspan='2'>MINIMO NO IMPONIBLE</th>";
        html+="<th rowspan='2'>DIFERENCIA SUJETA A IMPUESTOS</th>";
        html+="<th rowspan='2'>IMPUESTO LIQUIDADO</th>";
        html+="<th rowspan='2'>COMPUTO IVA SIN DDJJ</th>";
        html+="<th rowspan='2'>13% SOBRE DOS SALARIOS MINIMOS</th>";
        html+="<th rowspan='2'>SALDO FAVOR IMPUESTOS</th>";
        html+="<th rowspan='2'>SALDO FAVOR EMPLEADO</th>";
        html+="<th rowspan='2'>SALDO MES ANTERIOR</th>";        
        html+="<th rowspan='2'>UFV MES ANTERIOR</th>";
        html+="<th rowspan='2'>UFV ACTUAL</th>";
        html+="<th rowspan='2'>ACTUALIZACION</th>";
        html+="<th rowspan='2'>SUB TOTAL i + j</th>";
        html+="<th rowspan='2'>SALDO TOTAL A FAVOR EMPLEADO</th>";
        html+="<th rowspan='2'>SALDO UTILIZADO</th>";
        html+="<th rowspan='2'>IMPUESTO RETENIDO A PAGAR</th>";
        html+="<th rowspan='2'>SALDO A FAVOR SIGTE MES</th>";
        html+="<th rowspan='2'>TOTAL DESCUENTO MES</th>";
        html+="<th rowspan='2'>TOTAL RETROACTIVO PAGABLE</th>";
        html+="<th rowspan='2'>TOTAL LIQUIDO PAGABLE NO IMPONIBLE</th>";
        html+="<th rowspan='2'>TOTAL LIQUIDO PAGABLE</th>";                
        html+="</tr>";                
        html+="<tr>";             
        html+="<th>DIA</th>";
        html+="<th>MES</th>";
        html+="<th>AÑO</th>";        
        html+="<th>SEGURO LARGO PLAZO</th>";
        html+="<th>RIESGO COMUN</th>";
        html+="<th>COMISION AFP</th>";
        html+="<th>SOLIDARIO ASEGURADO</th>";
        html+="<th>SOLIDARIO NACIONAL</th>";
        html+="<th>TOTAL APORTE LABORAL</th>";
        html+="<th>CSBP</th>";
        html+="<th>RIESGO PROFECIONAL</th>";
        html+="<th>PRO VIVIENDA</th>";
        html+="<th>APORTE SOLIDARIO</th>";
        html+="<th>TOTAL APORTE PATRONAL</th>";
        html+="</tr>";                
        html+="</thead>";
        // </editor-fold>
        html+="<tbody style='width: 100%; height: 500px; overflow: auto;'>";                
        
        List<RHH_PLANILLA_PROVISION_EMPLE> lista_planilla =new RHH_PLANILLA_PROVISION_EMPLE(con).BuscarXfecha(ano, mes);
        RHH_PLANILLA_PROVISION_EMP_CAB ca = new RHH_PLANILLA_PROVISION_EMP_CAB(con).Buscar(ano, mes);
        html+=abrirPlanilla_mod(ano, mes, con);
        html+="</tbody>\",\"estado\":\""+ca.getESTADO()+"\"}";                        
        
        return html;
    }
    private String recargar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));        
        // <editor-fold defaultstate="collapsed" desc="HEAD">  
        String html="<thead>";
        html+="<tr>";
        html+="<th rowspan='2'>CI</th>";
        html+="<th rowspan='2'>LUGAR DE EMISION</th>";
        html+="<th rowspan='2'>PRIMER NOMBRE</th>";
        html+="<th rowspan='2'>SEGUNDO NOMBRE</th>";
        html+="<th rowspan='2'>PRIMER APELLIDO</th>";
        html+="<th rowspan='2'>SEGUNDO APELLIDO</th>";
        html+="<th rowspan='2'>TELEFONO</th>";
        html+="<th rowspan='2'>EMAIL</th>";
        html+="<th rowspan='2'>PROFESION</th>";
        html+="<th rowspan='2'>FECHA CONTRATACION</th>";
        html+="<th rowspan='2'>FECHA RETIRO</th>";
        html+="<th rowspan='2'>MOTIVO RETIRO</th>";        
        html+="<th rowspan='2'>OBSERVACION</th>";        
        html+="<th colspan='3'>ANTIGUEDAD</th>";
        html+="<th rowspan='2'>CARGO</th>";
        html+="<th rowspan='2'>DEPARTAMENTO</th>";
        html+="<th rowspan='2'>REGIONAL</th>";
        html+="<th rowspan='2'>SUCURSAL</th>";         
        html+="<th rowspan='2'>SALARIO BASICO</th>";        
        html+="<th rowspan='2'>INREMENTO SALARIAL</th>";
        html+="<th rowspan='2'>DIAS MES</th>";        
        html+="<th rowspan='2'>DIAS TRABAJADOS</th>";
        html+="<th rowspan='2'>SUELDO ACTUAL</th>";
        html+="<th rowspan='2'>SALARIO DIAS TRABAJADOS</th>";        
        html+="<th rowspan='2'>BONO ANTIGUEDAD</th>";
        html+="<th rowspan='2'>OTROS INGRESOS</th>";
        html+="<th rowspan='2'>OTROS INGRESOS NO IMPONIBLES</th>";
        html+="<th rowspan='2'>TOTAL GANADO + NO IMPONIBLES</th>";
        html+="<th rowspan='2'>TOTAL GANADO</th>";        
        html+="<th rowspan='2'>MONTO PAGADO DE QUINCENA</th>";
        html+="<th rowspan='2'>ANTICIPO</th>";
        html+="<th rowspan='2'>ATRASOS</th>";
        html+="<th rowspan='2'>FALTAS</th>";        
        html+="<th rowspan='2'>SANCIONES</th>";
        html+="<th rowspan='2'>DEUDA CELULAR</th>";
        html+="<th rowspan='2'>DESCUENTOS</th>";
        html+="<th colspan='6'>APORTE LABORAL</th>";        
        html+="<th colspan='5'>APORTE PATRONAL</th>";                
        html+="<th rowspan='2'>SUELDO NETO SUJETO A IMPUESTOS</th>";
        html+="<th rowspan='2'>MINIMO NO IMPONIBLE</th>";
        html+="<th rowspan='2'>DIFERENCIA SUJETA A IMPUESTOS</th>";
        html+="<th rowspan='2'>IMPUESTO LIQUIDADO</th>";
        html+="<th rowspan='2'>COMPUTO IVA SIN DDJJ</th>";
        html+="<th rowspan='2'>13% SOBRE DOS SALARIOS MINIMOS</th>";
        html+="<th rowspan='2'>SALDO FAVOR IMPUESTOS</th>";
        html+="<th rowspan='2'>SALDO FAVOR EMPLEADO</th>";
        html+="<th rowspan='2'>SALDO MES ANTERIOR</th>";        
        html+="<th rowspan='2'>UFV MES ANTERIOR</th>";
        html+="<th rowspan='2'>UFV ACTUAL</th>";
        html+="<th rowspan='2'>ACTUALIZACION</th>";
        html+="<th rowspan='2'>SUB TOTAL i + j</th>";
        html+="<th rowspan='2'>SALDO TOTAL A FAVOR EMPLEADO</th>";
        html+="<th rowspan='2'>SALDO UTILIZADO</th>";
        html+="<th rowspan='2'>IMPUESTO RETENIDO A PAGAR</th>";
        html+="<th rowspan='2'>SALDO A FAVOR SIGTE MES</th>";
        html+="<th rowspan='2'>TOTAL DESCUENTO MES</th>";
        html+="<th rowspan='2'>TOTAL RETROACTIVO PAGABLE</th>";
        html+="<th rowspan='2'>TOTAL LIQUIDO PAGABLE NO IMPONIBLE</th>";
        html+="<th rowspan='2'>TOTAL LIQUIDO PAGABLE</th>";
        html+="</tr>";                
        html+="<tr>";             
        html+="<th>DIA</th>";
        html+="<th>MES</th>";
        html+="<th>AÑO</th>";        
        html+="<th>SEGURO LARGO PLAZO</th>";
        html+="<th>RIESGO COMUN</th>";
        html+="<th>COMISION AFP</th>";
        html+="<th>SOLIDARIO ASEGURADO</th>";
        html+="<th>SOLIDARIO NACIONAL</th>";
        html+="<th>TOTAL APORTE LABORAL</th>";
        html+="<th>CSBP</th>";
        html+="<th>RIESGO PROFECIONAL</th>";
        html+="<th>PRO VIVIENDA</th>";
        html+="<th>APORTE SOLIDARIO</th>";
        html+="<th>TOTAL APORTE PATRONAL</th>";
        html+="</tr>";                
        html+="</thead>";
        // </editor-fold>
        html+="<tbody style='width: 100%; height: 500px; overflow: auto;'>";                
        html+=generarPlanilla(ano, mes, con);
        html+="</tbody>";        
        return html;
    }       
    private String generarPlanilla(int ano_actual, int mes_actual, Conexion con) throws SQLException{
        con.Transacction();
        try
        {
            String html="";
            Calendar fechaactual = new GregorianCalendar();
            fechaactual.set(Calendar.YEAR, ano_actual);
            fechaactual.set(Calendar.MONTH, mes_actual-1);
            RHH_PLANILLA_PROVISION_EMP_CAB ca = new RHH_PLANILLA_PROVISION_EMP_CAB(con).Buscar(ano_actual, mes_actual);            
            int id_cabecera=0;
            if(ca!=null)
            {
                id_cabecera=ca.getID();
                new RHH_PLANILLA_PROVISION_EMPLE(con).eliminarxCabecera(id_cabecera);
                new CON_PLANILLA_EMPLE_APRO(con).EliminarXCabecera(id_cabecera);
                ca.EliminarXid();
                id_cabecera=ca.Insertar();
            }
            else
            {
                ca = new RHH_PLANILLA_PROVISION_EMP_CAB(0, 1,1,ano_actual, mes_actual);
                ca.setCon(con);
                id_cabecera=ca.Insertar();
            }
                            
            RHH_PLANILLA_PROVISION_EMPLE planilla = new RHH_PLANILLA_PROVISION_EMPLE(con);            

            String consulta = "SELECT RHH_USUARIO.ID,RHH_PERSONA.CI,\n" +
                            "       RHH_PERSONA.LUGAR_EMISION,\n" +
                            "       RHH_PERSONA.PRIMER_NOMBRE,\n" +
                            "       RHH_PERSONA.SEGUNDO_NOMBRE,\n" +
                            "       RHH_PERSONA.PRIMER_APELLIDO,\n" +
                            "       RHH_PERSONA.SEGUNDO_APELLIDO,\n" +
                            "       RHH_PERSONA.TELEFONO,\n" +
                            "       RHH_PERSONA.EMAIL,\n" +
                            "       RHH_FECHAS_HITO.FECHA,\n" +
                            "       RHH_CARGO.DESCRIPCION AS CARGO,\n" +
                            "       RHH_DEPARTAMENTO.ID AS DEPARTAMENTO,\n" +
                            "       RHH_REGIONAL.ID AS REGIONAL,\n" +
                            "       RHH_SUCURSAL.ID AS SUCURSAL,\n" +
                            "       RHH_FECHAS_HITO.SALARIO,\n" +
                            "       RHH_USUARIO.ESTADO\n" +
                            "  FROM BROKER.RHH_CARGO,\n" +
                            "       BROKER.RHH_USUARIO,\n" +
                            "       BROKER.RHH_PERSONA,\n" +
                            "       BROKER.RHH_FECHAS_HITO,\n" +
                            "       BROKER.RHH_CARGO_DEP_REG_SUC,\n" +
                            "       BROKER.RHH_DEPARTAMENTO,\n" +
                            "       BROKER.RHH_REGIONAL,\n" +
                            "       BROKER.RHH_SUCURSAL\n" +
                            " WHERE     (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                            "       AND (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n" +
                            "       AND (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n" +
                            "       AND (RHH_CARGO_DEP_REG_SUC.ID_CARGO = RHH_CARGO.ID)\n" +
                            "       AND (RHH_CARGO_DEP_REG_SUC.ID_DEPTO = RHH_DEPARTAMENTO.ID(+))\n" +
                            "       AND (RHH_CARGO_DEP_REG_SUC.ID_REGIONAL = RHH_REGIONAL.ID(+))\n" +
                            "       AND (RHH_CARGO_DEP_REG_SUC.ID_SUCURSAL = RHH_SUCURSAL.ID(+))\n" +
                            "       AND (RHH_FECHAS_HITO.ID_EVENTO_HITO = 3)\n"+
                            "ORDER BY RHH_PERSONA.PRIMER_APELLIDO";
            ResultSet rs = con.EjecutarConsulta(consulta);

            while(rs.next())
            {                            
                planilla = new RHH_PLANILLA_PROVISION_EMPLE(con);
                planilla.setID_CABECERA(id_cabecera);
                int id_usuairo = rs.getInt("ID");
                int usuario_estado = rs.getInt("ESTADO");
                planilla.setID_USUARIO(id_usuairo);                       

                html+="<tr>";
                int ci = rs.getInt("CI");
                
                Date ingreso = rs.getDate("FECHA");
                SimpleDateFormat formato = new SimpleDateFormat("dd MMMM yyyy");                        
                planilla.setFECHA_INGRESO_EMPRESA(ingreso);           
                
                RHH_FECHAS_HITO fechai = new RHH_FECHAS_HITO(con).retiro(id_usuairo);                
                Date retiro_fecha = null;
                String retiro_motivo = "";
                String retiro_observacion = "";                                                
                
                if(fechai!=null)
                {
                    retiro_fecha= fechai.getFECHAinDate();
                    retiro_motivo=  new RHH_EVENTOS_HITO(con).getEvento(fechai.getID_EVENTO_HITO());
                    retiro_observacion=fechai.getDESCRIPCION();
                }                
                planilla.setFECHA_RETIRO_EMPRESA(retiro_fecha);            
                planilla.setMOTIVO_RETIRO(retiro_motivo);
                planilla.setOBSERVACION_RETIRO(retiro_observacion);

                Calendar calendario = new GregorianCalendar();
                calendario.set(Calendar.YEAR,0);
                calendario.set(Calendar.MONTH,0);
                calendario.set(Calendar.DAY_OF_MONTH, 1);

                int anof = 0;
                int mesf = 0;
                int diaf = 0;
                if(ingreso!=null)
                {
                    Date fecha1=ingreso;
                    Date fecha2=new GregorianCalendar().getTime();
                    long diferencia = fecha2.getTime()-fecha1.getTime();
                    int dia = (int)(diferencia/(3600000*24));
                    calendario.add(Calendar.DAY_OF_MONTH, dia);
                    if(dia<365)
                        anof=0;
                    else
                        anof=calendario.get(Calendar.YEAR);

                    mesf = calendario.get(Calendar.MONTH);
                    diaf = calendario.get(Calendar.DAY_OF_MONTH);
                }           

                planilla.setANTIGUEDAD_DIA(diaf);
                planilla.setANTIGUEDAD_MES(mesf);
                planilla.setANTIGUEDAD_ANO(anof);

                String cargo = rs.getString("CARGO");
                cargo=cargo==null?"":cargo;
                
                planilla.setCARGO(cargo);
                
                int departamento = rs.getInt("DEPARTAMENTO");                
                planilla.setDEPARTAMENTO(departamento);

                int regional = rs.getInt("REGIONAL");                  
                planilla.setREGIONAL(regional);            

                int sucursal = rs.getInt("SUCURSAL");                
                planilla.setSUCURSAL(sucursal);            

                double salario=rs.getDouble("SALARIO");
                planilla.setSUELDO(salario);

                int idplanilla=planilla.Insertar(); 

                List<RHH_FECHAS_HITO> incrementos = new RHH_FECHAS_HITO(con).Incrementos(id_usuairo);
                Double total_incrementos=0.0;
                for(RHH_FECHAS_HITO fecha:incrementos)
                {                            
                    total_incrementos+=fecha.getSALARIO();                    
                }
                planilla.setINCREMENTO_SALARIAL(total_incrementos);
                double sueldo_con_incremento=(salario+total_incrementos);
                planilla.setSUELDO_CON_INCREMENTO(sueldo_con_incremento);               
                
                Calendar fechaingreso = new GregorianCalendar();
                if(ingreso!=null)            
                fechaingreso.setTime(ingreso);
                
                Calendar fecharetiro = new GregorianCalendar();
                if(retiro_fecha!=null)            
                fecharetiro.setTime(retiro_fecha);

                Calendar fecha = new GregorianCalendar();
                fecha.set(Calendar.MONTH, mes_actual-1);
                fecha.set(Calendar.YEAR, ano_actual);
                int dias_mes=fecha.getActualMaximum(Calendar.DAY_OF_MONTH);
                planilla.setDIAS_MES(dias_mes);
                                
                double salario_dias_trabajados = sueldo_con_incremento;
                
                int mes_ingreso = fechaingreso.get(Calendar.MONTH)+1;
                int ano_ingreso = fechaingreso.get(Calendar.YEAR);         
                int total_dias_no_trabajados=0;
                if(mes_ingreso==mes_actual&&ano_ingreso==ano_actual)
                {
                    int dia = fechaingreso.get(Calendar.DAY_OF_MONTH);                    
                    double descuento = (sueldo_con_incremento/dias_mes)*dia;                    
                    salario_dias_trabajados -= descuento;
                    total_dias_no_trabajados+=dia;
                }
                
                int mes_retiro = fecharetiro.get(Calendar.MONTH)+1;
                int ano_retiro = fecharetiro.get(Calendar.YEAR);
                if(mes_retiro==mes_actual&&ano_retiro==ano_actual)
                {
                    int dia = fecharetiro.get(Calendar.DAY_OF_MONTH);                    
                    int dias_no_trabajados=dias_mes-dia;
                    double descuento = (sueldo_con_incremento/dias_mes)*dias_no_trabajados;          
                    salario_dias_trabajados -= descuento;
                    total_dias_no_trabajados+=dias_no_trabajados;
                }
                int dias_trabajados=dias_mes-total_dias_no_trabajados;
                planilla.setDIAS_TRABAJADOS(dias_trabajados);
                planilla.setSALARIO_DIAS_TRABAJADOS(salario_dias_trabajados);
                
                long milis1 = fechaingreso.getTimeInMillis();
                long milis2 = fechaactual.getTimeInMillis();
                long diff = milis2 - milis1;
                if(diff<0)
                    continue;
                
                long diffDays = diff / (24 * 60 * 60 * 1000);

                int ano = (int) (diffDays/365);

                RHH_BONO_ANTIGUEDAD banti = new RHH_BONO_ANTIGUEDAD(con).sacarPorcentaje(ano);
                double porcentaje_antiguedad = banti.getPORCENTAJE()/100;

                CON_DATOS_EMPRESA datos_empresa = new CON_DATOS_EMPRESA(con).Buscar();

                int multiplic = datos_empresa.getBONO_ANTIGUEDAD();
                double salariominimo_nal = new RHH_SALARIO_MINIMO(con).salarioActual();

                double Bono_Antiguedad = porcentaje_antiguedad*(multiplic*salariominimo_nal);            
                planilla.setBONO_ANTIGUEDAD(Bono_Antiguedad);

                List<RHH_BONO_USUARIO> otros_Ingresos = new RHH_BONO_USUARIO(con).TodosxUsuarioconImpuesto(id_usuairo);
                double otro_ingreso=0.0;
                for(RHH_BONO_USUARIO bono:otros_Ingresos)
                {            
                    SimpleDateFormat formatomy = new SimpleDateFormat("MM/yyyy");
                    Calendar calini = new GregorianCalendar();
                    Calendar califin = new GregorianCalendar();
                    calini.setTime(bono.getFECHA_INId());
                    califin.setTime(bono.getFECHA_FINd());            

                    boolean ok = false;
                    while(calini.before(califin)||calini.equals(califin))
                    {
                        String fechaini = formatomy.format(calini.getTime());
                        String fechaact = formatomy.format(fechaactual.getTime());
                        if(fechaini.equals(fechaact))
                        {
                            ok=true;
                            break;
                        }
                        calini.add(Calendar.MONTH, 1);                   
                    }
                    
                    if(ok)
                    {                        
                        otro_ingreso +=bono.getMONTO();                        
                    }                                  
                    planilla.setOTROS_INGRESOS(otro_ingreso);
                }

                List<RHH_BONO_USUARIO> otros_Ingresos_sin_imp = new RHH_BONO_USUARIO(con).TodosxUsuarioSinImpuesto(id_usuairo);
                double otro_ingreso_sin_imp=0.0;
                for(RHH_BONO_USUARIO bono:otros_Ingresos_sin_imp)
                {            
                    SimpleDateFormat formatomy = new SimpleDateFormat("MM/yyyy");
                    Calendar calini = new GregorianCalendar();
                    Calendar califin = new GregorianCalendar();
                    calini.setTime(bono.getFECHA_INId());
                    califin.setTime(bono.getFECHA_FINd());            

                    Calendar actual = new GregorianCalendar();
                    boolean ok = false;
                    while(calini.before(califin)||calini.equals(califin))
                    {
                        String fechaini = formatomy.format(calini.getTime());
                        String fechaact = formatomy.format(actual.getTime());
                        if(fechaini.equals(fechaact))
                        {
                            ok=true;
                            break;
                        }
                        calini.add(Calendar.MONTH, 1);                   
                    }

                    if(ok)
                    {
                        otro_ingreso_sin_imp +=bono.getMONTO();                        
                    }                                          
                    planilla.setOTROS_INGRESOS_NO_IMPONIBLES(otro_ingreso_sin_imp);
                }           

                double total_ganado = sueldo_con_incremento+Bono_Antiguedad+otro_ingreso;
                double total_ganado_no_imponible = total_ganado+otro_ingreso_sin_imp;            
                planilla.setTOTAL_GANADO_NO_IMPONIBLE(total_ganado_no_imponible);            
                planilla.setTOTAL_GANADO(total_ganado);

                RHH_PAGOS_QUINCENA_CABECERA cabe = new RHH_PAGOS_QUINCENA_CABECERA(con).Buscar(ano_actual, mes_actual);
                RHH_PAGOS_QUINCENA pagoquincena = null;
                if(cabe!=null)
                    pagoquincena = new RHH_PAGOS_QUINCENA(con).BuscarxCABEyus(cabe.getID(), id_usuairo);
                
                double montoquincena=0.0;
                if(pagoquincena!=null)
                {
                    if(cabe.getESTADO()!=1)
                        montoquincena=pagoquincena.getMONTO();
                }           
                planilla.setMONTO_PAGADO_QUINCENA(montoquincena);

                List<RHH_DEUDA> deudas_usr = new RHH_DEUDA(con).Todas_Anticipo_Pendientes(id_usuairo);
                double anticipo=0.0;
                for(RHH_DEUDA deuda:deudas_usr)
                {
                    int pagos_realizados=deuda.Cantidad_pagos_realizados();
                    int pagos_total=deuda.Cantidad_pagosXdeuda();
                    int pagos_restantes = pagos_total-pagos_realizados; 

                    Double total=deuda.TotalDeudaActual();
                    anticipo+= (total/pagos_restantes);                    
                }
                planilla.setANTICIPO(anticipo);

                double atrazos = 0.0;
                double faltas = 0.0;
                double sancion = 0.0;           

                planilla.setSANCION(sancion);

                Double descuento_celular = new RHH_PLANILLA_CELULAR(con).DescuentoUsrXanoYmes(ano_actual, mes_actual, ci);

                planilla.setDEUDA_CELULAR(descuento_celular);

                deudas_usr = new RHH_DEUDA(con).Todas_Descuento_Pendientes(id_usuairo);
                double descuento=0.0;
                for(RHH_DEUDA deuda:deudas_usr)
                {
                    int pagos_realizados=deuda.Cantidad_pagos_realizados();
                    int pagos_total=deuda.Cantidad_pagosXdeuda();
                    int pagos_restantes = pagos_total-pagos_realizados; 

                    Double total=deuda.TotalDeudaActual();
                    descuento+= (total/pagos_restantes);                    
                }                        
                planilla.setDEUDA_CELULAR(descuento);

                double total_ganado_sin_imp = total_ganado;

                double porc_largo_plazo=0;
                if(usuario_estado==0)
                    porc_largo_plazo= datos_empresa.getPORCENTAJE_LARGO_PLAZO();
                else
                    porc_largo_plazo= datos_empresa.getPORCENTAJE_JUBILADOS();
                
                double seguro_largo_plazo=total_ganado_sin_imp*(porc_largo_plazo/100);            
                planilla.setSEGURO_LARGO_PLAZO(seguro_largo_plazo);

                double porc_riesgo_comun = datos_empresa.getPORCENTAJE_RIESGO_COMUN();
                double riesgo_comun=total_ganado_sin_imp*(porc_riesgo_comun/100);            
                planilla.setRIESGO_COMUN(riesgo_comun);

                double porc_afp = datos_empresa.getPORCENTAJE_COMISION_AFP();
                double afp=total_ganado_sin_imp*(porc_afp/100);            
                planilla.setCOMISION_AFP(afp);

                double porc_solidario_asegurado = datos_empresa.getPORCENTAJE_SOLIDARIO();
                double solidario_asegurado=total_ganado_sin_imp*(porc_solidario_asegurado/100);            
                planilla.setSOLIDARIO_ASEGURADO(solidario_asegurado);

                double monto_SNA = datos_empresa.getMONTO_SOLIDARIO_NAC_A();
                double monto_SNB = datos_empresa.getMONTO_SOLIDARIO_NAC_B();
                double monto_SNC = datos_empresa.getMONTO_SOLIDARIO_NAC_C();
                double porc_SNA = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_A();
                double porc_SNB = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_B();
                double porc_SNC = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_C();

                double solidarion_nacional=0.0;

                if(total_ganado_sin_imp>=monto_SNA && total_ganado_sin_imp<monto_SNB)
                {
                    solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
                }
                if(total_ganado_sin_imp>=monto_SNB&&total_ganado_sin_imp<monto_SNC)
                {
                    solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
                    solidarion_nacional+=(total_ganado_sin_imp-monto_SNB)*(porc_SNB/100);
                }
                if(total_ganado_sin_imp>=monto_SNC)
                {
                    solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
                    solidarion_nacional+=(total_ganado_sin_imp-monto_SNB)*(porc_SNB/100);
                    solidarion_nacional+=(total_ganado_sin_imp-monto_SNC)*(porc_SNC/100);
                }

                planilla.setSOLIDARIO_NACIONAL(solidarion_nacional);

                Double total_aporte_laboral = seguro_largo_plazo+riesgo_comun+afp+solidario_asegurado+solidarion_nacional;            
                planilla.setTOTAL_APORTE_LABORAL(total_aporte_laboral);

                double porc_csbp = datos_empresa.getPORCENTAJE_CSBP_SEG_MED();
                double csbp=total_ganado_sin_imp*(porc_csbp/100);            
                planilla.setCSBP(csbp);

                double porc_afp_pro = datos_empresa.getPORCENTAJE_RISEGO_PROFESIONAL();
                double afp_pro=total_ganado_sin_imp*(porc_afp_pro/100);            
                planilla.setRIESGO_PROFESIONAL(afp_pro);

                double porc_aporte_pro = datos_empresa.getPORCENTAJE_APORTE_PRO();
                double aporte_pro=total_ganado_sin_imp*(porc_aporte_pro/100);            
                planilla.setPRO_VIVIENDA(aporte_pro);

                double porc_aporte_solidario = datos_empresa.getPORCENTAJE_SOLIDARIO();
                double aporte_solidario=total_ganado_sin_imp*(porc_aporte_solidario/100);            
                planilla.setAPORTE_SOLIDARIO(aporte_solidario);

                double total_aporte_patronal = csbp+afp_pro+aporte_pro+aporte_solidario;            
                planilla.setTOTAL_APORTE_PATRONAL(total_aporte_patronal);

                double salario_neto_sujeto_imp = total_ganado_sin_imp-total_aporte_laboral;            
                planilla.setSUELDO_NETO_SUJ_IMPUESTOS(salario_neto_sujeto_imp);

                double minimo_moinmp=salariominimo_nal*2;

                if(minimo_moinmp>=salario_neto_sujeto_imp)
                    minimo_moinmp=salario_neto_sujeto_imp;            
                planilla.setMINIMO_NO_IMPONIBLE(minimo_moinmp);

                double dif_sujeta_impuestos= salario_neto_sujeto_imp-minimo_moinmp;            
                planilla.setDIFERENCIA_SUJ_IMPUESTOS(dif_sujeta_impuestos);

                double imp_liquidado = dif_sujeta_impuestos*0.13;            
                planilla.setIMPUESTO_LIQUIDADO(imp_liquidado);

                double computo_iva_ddj=0.0;
                planilla.setCOMPUTO_IVA_DDJJ(computo_iva_ddj);

                double sobre_dos_salarios_minimos= 0.0;
                if(dif_sujeta_impuestos!=0)
                {
                    if(imp_liquidado<(0.13*(salariominimo_nal*2)))
                        sobre_dos_salarios_minimos=imp_liquidado;
                    else
                        sobre_dos_salarios_minimos=(0.13*(salariominimo_nal*2));
                }            
                planilla.setSOBRE_2_SALARIOS_MIN(sobre_dos_salarios_minimos);

                double computo_iva =0.0;
                double saldo_favor =0.0;
                
                if((imp_liquidado-computo_iva-sobre_dos_salarios_minimos)<0)
                    saldo_favor=0.0;
                else
                    saldo_favor=(imp_liquidado-computo_iva-sobre_dos_salarios_minimos);            
                planilla.setSALDO_FAVOR(saldo_favor);
                
                double saldo_favor_empleado=0.0;
                if(sobre_dos_salarios_minimos>imp_liquidado)
                    saldo_favor_empleado=0.0;
                else
                {
                    if(sobre_dos_salarios_minimos+computo_iva-imp_liquidado<0)
                        saldo_favor_empleado=0.0;
                    else
                        saldo_favor_empleado=sobre_dos_salarios_minimos+computo_iva-imp_liquidado;
                }            
                planilla.setSALDO_FAVOR_EMPLEADO(saldo_favor_empleado);                
                
                Calendar fecha_anterior = new GregorianCalendar();
                fecha_anterior.add(Calendar.MONTH, -1);
                int ano_anterior=fecha_anterior.get(Calendar.YEAR);
                int mes_anterior=fecha_anterior.get(Calendar.MONTH)+1;                
                
                double saldo_mes_anterior=new RHH_CREDITO_FISCAL(con).MontoActual(id_usuairo);
                planilla.setSALDO_MES_ANTERIOR(saldo_mes_anterior);

                CON_MONEDA moneda = new CON_MONEDA();
                moneda.setCon(con);           

                double moneda_inflacionaria_mes_anterior = moneda.Buscar_Inflacionaria_Mes_Pasado(mes_anterior, ano_anterior);           
                planilla.setUFV_MES_PASADO(moneda_inflacionaria_mes_anterior);
                
                double moneda_inflacionaria_actual = moneda.Buscar_Inflacionaria_actual();            
                planilla.setUFV_MES_ACTUAL(moneda_inflacionaria_actual);

                double actualizacion = ((saldo_mes_anterior/moneda_inflacionaria_mes_anterior)*moneda_inflacionaria_actual)-saldo_mes_anterior;            
                planilla.setACTUALIZACION(actualizacion);

                double sub_total = saldo_mes_anterior+actualizacion;            
                planilla.setSUB_TOTAL(sub_total);

                double saldo_total_a_favor_empleado = saldo_favor_empleado+sub_total;            
                planilla.setSALDO_TOTAL_FAVOR_EMPLEADO(saldo_total_a_favor_empleado);

                double saldo_utilizado=0.0;            
                if(saldo_total_a_favor_empleado>saldo_favor)
                    saldo_utilizado=saldo_favor;
                else
                    saldo_utilizado=saldo_total_a_favor_empleado;           
                planilla.setSALDO_UTILIZADO(saldo_utilizado);

                double impuesto_retenido_pagar=0.0;            
                if(saldo_total_a_favor_empleado<saldo_favor)
                    impuesto_retenido_pagar=saldo_favor-saldo_total_a_favor_empleado;           
                planilla.setIMPUESTO_RETENIDO_PAGAR(impuesto_retenido_pagar);

                double saldo_favor_sigte_mes=0.0;            
                if(saldo_total_a_favor_empleado>saldo_favor)
                    saldo_favor_sigte_mes=saldo_total_a_favor_empleado-saldo_utilizado;           
                planilla.setSALDO_FAVOR_SIGUIENTE_MES(saldo_favor_sigte_mes);

                double total_desc_mes = anticipo+montoquincena+descuento+total_aporte_laboral+impuesto_retenido_pagar;//(falta atraso, faltas, sanciones, deuda celular)            
                planilla.setTOTAL_DESC_MES(total_desc_mes);

                double total_liquido_pagable_no_imponible =total_ganado_no_imponible-total_desc_mes;            
                planilla.setTOTAL_LIQUIDO_PAGABLE_IMPO(total_liquido_pagable_no_imponible);

                double total_liquido_pagable =total_ganado-total_desc_mes;            
                planilla.setTOTAL_LIQUIDO_PAGABLE(total_liquido_pagable);                 
                planilla.setID(idplanilla);                                
                
                double monto_retro =0;
                
                RHH_PLANILLA_RETROACTIVO_CABE cabe_retro = new RHH_PLANILLA_RETROACTIVO_CABE(con).Buscar(ano_actual, mes_actual);
                if(cabe_retro!=null)
                {
                    RHH_PLANILLA_RETROACTIVOS retro = new RHH_PLANILLA_RETROACTIVOS(con).Buscar(cabe_retro.getID(), id_usuairo);
                    if(retro!=null)
                        monto_retro = retro.getTOTAL_RETROACTIVO_PAGABLE();                    
                }
                
                planilla.setTOTAL_RETROACTIVOS(monto_retro);
                planilla.Modificar();
                            
                String LUGAR_EMISION = rs.getString("LUGAR_EMISION");
                LUGAR_EMISION=LUGAR_EMISION==null?"":LUGAR_EMISION;
                String PRIMER_NOMBRE = rs.getString("PRIMER_NOMBRE");
                PRIMER_NOMBRE=PRIMER_NOMBRE==null?"":PRIMER_NOMBRE;
                String SEGUNDO_NOMBRE = rs.getString("SEGUNDO_NOMBRE");
                SEGUNDO_NOMBRE=SEGUNDO_NOMBRE==null?"":SEGUNDO_NOMBRE;
                String PRIMER_APELLIDO = rs.getString("PRIMER_APELLIDO");
                PRIMER_APELLIDO=PRIMER_APELLIDO==null?"":PRIMER_APELLIDO;
                String SEGUNDO_APELLIDO = rs.getString("SEGUNDO_APELLIDO");
                SEGUNDO_APELLIDO=SEGUNDO_APELLIDO==null?"":SEGUNDO_APELLIDO;
                String TELEFONO = rs.getString("TELEFONO");
                TELEFONO=TELEFONO==null?"":TELEFONO;
                String EMAIL = rs.getString("EMAIL");
                EMAIL=EMAIL==null?"":EMAIL;

                html+="<td>"+ci+"</td>";
                html+="<td>"+LUGAR_EMISION+"</td>";
                html+="<td>"+PRIMER_NOMBRE+"</td>";
                html+="<td>"+SEGUNDO_NOMBRE+"</td>";
                html+="<td>"+PRIMER_APELLIDO+"</td>";
                html+="<td>"+SEGUNDO_APELLIDO+"</td>";            
                html+="<td>"+TELEFONO+"</td>";
                html+="<td>"+EMAIL+"</td>";           
                html+="<td><a href='#' onclick='pop_profecion("+ci+");'>VER</a></td>";
                if(ingreso!=null)
                    html+="<td>"+formato.format(ingreso)+"</td>";
                else
                    html+="<td></td>";
                
                if(retiro_fecha!=null)
                    html+="<td>"+formato.format(retiro_fecha)+"</td>";
                else
                    html+="<td></td>";
                html+="<td>"+retiro_motivo+"</td>";        
                html+="<td>"+retiro_observacion+"</td>";
                html+="<td>"+diaf+"</td>";
                html+="<td>"+mesf+"</td>";
                html+="<td>"+anof+"</td>";
                html+="<td>"+cargo+"</td>";
                String depto="***";
                if(departamento!=0)
                    depto = new RHH_DEPARTAMENTO(con).BuscarXid(departamento).getDESCRIPCION();
                html+="<td>"+depto+"</td>";
                
                String reg="***";
                if(regional!=0)
                    reg = new RHH_REGIONAL(con).BuscarXid(regional).getDESCRIPCION();
                html+="<td>"+reg+"</td>";
                
                String suc="***";
                if(sucursal!=0)
                    suc = new RHH_SUCURSAL(con).BuscarXid(sucursal).getDESCRIPCION();
                html+="<td>"+suc+"</td>";
                
                html+="<td>"+salario+"</td>";
                html+="<td>"+total_incrementos+"</td>";                
                html+="<td>"+dias_mes+"</td>";
                html+="<td>"+dias_trabajados+"</td>";                           
                html+="<td>"+sueldo_con_incremento+"</td>";
                html+="<td>"+salario_dias_trabajados+"</td>";
                html+="<td>"+Bono_Antiguedad+"</td>";
                html+="<td>"+otro_ingreso+"</td>";
                html+="<td>"+otro_ingreso_sin_imp+"</td>";
                html+="<td>"+total_ganado_no_imponible+"</td>";
                html+="<td>"+total_ganado+"</td>";
                html+="<td>"+montoquincena+"</td>";
                html+="<td>"+anticipo+"</td>";
                html+="<td>"+atrazos+"</td>";
                html+="<td>"+faltas+"</td>";
                html+="<td>"+sancion+"</td>";
                html+="<td>"+descuento_celular+"</td>";
                html+="<td>"+descuento+"</td>";
                html+="<td>"+seguro_largo_plazo+"</td>";
                html+="<td>"+riesgo_comun+"</td>";
                html+="<td>"+afp+"</td>";
                html+="<td>"+solidario_asegurado+"</td>";
                html+="<td>"+solidarion_nacional+"</td>";
                html+="<td>"+total_aporte_laboral+"</td>";
                html+="<td>"+csbp+"</td>";
                html+="<td>"+afp_pro+"</td>";
                html+="<td>"+aporte_pro+"</td>";
                html+="<td>"+aporte_solidario+"</td>";
                html+="<td>"+total_aporte_patronal+"</td>";
                html+="<td>"+salario_neto_sujeto_imp+"</td>";
                html+="<td>"+minimo_moinmp+"</td>";
                html+="<td>"+dif_sujeta_impuestos+"</td>";
                html+="<td>"+imp_liquidado+"</td>";
                html+="<td><input type='number' data-id='"+idplanilla+"' onblur='computo_iva_sin_ddjj(this);' value='"+computo_iva_ddj+"' min='0'/> </td>";
                html+="<td>"+sobre_dos_salarios_minimos+"</td>";
                html+="<td>"+saldo_favor+"</td>";
                html+="<td>"+saldo_favor_empleado+"</td>";
                html+="<td><input type='number' data-id='"+idplanilla+"' onblur='saldo_mes_anterior(this);' value='"+saldo_mes_anterior+"' min='0'/> </td>";
                html+="<td><input type='number' data-id='"+idplanilla+"' onblur='moneda_inflacionaria_mes_anterior(this);' value='"+moneda_inflacionaria_mes_anterior+"' min='0'/> </td>";                                
                html+="<td>"+moneda_inflacionaria_actual+"</td>";
                html+="<td>"+actualizacion+"</td>";
                html+="<td>"+sub_total+"</td>";
                html+="<td>"+saldo_total_a_favor_empleado+"</td>";
                html+="<td>"+saldo_utilizado+"</td>";
                html+="<td>"+impuesto_retenido_pagar+"</td>";
                html+="<td>"+saldo_favor_sigte_mes+"</td>";
                html+="<td>"+total_desc_mes+"</td>";
                html+="<td>"+planilla.getTOTAL_RETROACTIVOS()+"</td>";
                html+="<td>"+(total_liquido_pagable_no_imponible-total_liquido_pagable)+"</td>";
                html+="<td>"+total_liquido_pagable+"</td>";                    
                html+="</tr>";
            }
            con.commit();
            return html;
        }
        catch(SQLException e)
        {
            con.rollback();
            e.printStackTrace();
            return "";
        }       
    }    
    private String ModificarFila(HttpServletRequest request, Conexion con) throws SQLException{
        int id_planilla = Integer.parseInt(request.getParameter("id_planilla"));
        int ano_actual = Integer.parseInt(request.getParameter("ano_actual"));
        int mes_actual = Integer.parseInt(request.getParameter("mes_actual"));
        double computo_iva = Double.parseDouble(request.getParameter("computo_iva"));        
        double ufv_mes_anterior = Double.parseDouble(request.getParameter("ufv_mes_anterior"));
        double saldo_mes_anterior = Double.parseDouble(request.getParameter("saldo_mes_anterior"));
        
        con.Transacction();
        try
        {
            String html="";
            Calendar fechaactual = new GregorianCalendar();
            fechaactual.set(Calendar.YEAR, ano_actual);
            fechaactual.set(Calendar.MONTH, mes_actual-1);            
            
            RHH_PLANILLA_PROVISION_EMPLE planilla = new RHH_PLANILLA_PROVISION_EMPLE(con).Buscar(id_planilla);
            String consulta = "SELECT RHH_USUARIO.ID,RHH_PERSONA.CI,\n" +
                            "       RHH_PERSONA.LUGAR_EMISION,\n" +
                            "       RHH_PERSONA.PRIMER_NOMBRE,\n" +
                            "       RHH_PERSONA.SEGUNDO_NOMBRE,\n" +
                            "       RHH_PERSONA.PRIMER_APELLIDO,\n" +
                            "       RHH_PERSONA.SEGUNDO_APELLIDO,\n" +
                            "       RHH_PERSONA.TELEFONO,\n" +
                            "       RHH_PERSONA.EMAIL,\n" +
                            "       RHH_FECHAS_HITO.FECHA,\n" +
                            "       RHH_CARGO.DESCRIPCION AS CARGO,\n" +
                            "       RHH_DEPARTAMENTO.ID AS DEPARTAMENTO,\n" +
                            "       RHH_REGIONAL.ID AS REGIONAL,\n" +
                            "       RHH_SUCURSAL.ID AS SUCURSAL,\n" +
                            "       RHH_FECHAS_HITO.SALARIO,\n" +
                            "       RHH_USUARIO.ESTADO\n" +
                            "  FROM BROKER.RHH_CARGO,\n" +
                            "       BROKER.RHH_USUARIO,\n" +
                            "       BROKER.RHH_PERSONA,\n" +
                            "       BROKER.RHH_FECHAS_HITO,\n" +
                            "       BROKER.RHH_CARGO_DEP_REG_SUC,\n" +
                            "       BROKER.RHH_DEPARTAMENTO,\n" +
                            "       BROKER.RHH_REGIONAL,\n" +
                            "       BROKER.RHH_SUCURSAL\n" +
                            " WHERE     (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                            "       AND (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n" +
                            "       AND (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n" +
                            "       AND (RHH_CARGO_DEP_REG_SUC.ID_CARGO = RHH_CARGO.ID)\n" +
                            "       AND (RHH_CARGO_DEP_REG_SUC.ID_DEPTO = RHH_DEPARTAMENTO.ID(+))\n" +
                            "       AND (RHH_CARGO_DEP_REG_SUC.ID_REGIONAL = RHH_REGIONAL.ID(+))\n" +
                            "       AND (RHH_CARGO_DEP_REG_SUC.ID_SUCURSAL = RHH_SUCURSAL.ID(+))\n" +
                            "       AND (RHH_FECHAS_HITO.ID_EVENTO_HITO = 3)\n"+
                            "       AND (RHH_USUARIO.ID = "+planilla.getID_USUARIO()+")\n"+
                            "       ORDER BY RHH_PERSONA.PRIMER_APELLIDO";
            ResultSet rs = con.EjecutarConsulta(consulta);
           
            if(rs.next())
            {                
                int id_usuairo = rs.getInt("ID");
                int usuario_estado = rs.getInt("ESTADO");
                planilla.setID_USUARIO(id_usuairo);                
                
                int ci = rs.getInt("CI");
                
                Date ingreso = rs.getDate("FECHA");
                SimpleDateFormat formato = new SimpleDateFormat("dd MMMM yyyy");                        
                planilla.setFECHA_INGRESO_EMPRESA(ingreso); 
                
                
                RHH_FECHAS_HITO fechai = new RHH_FECHAS_HITO(con).retiro(id_usuairo);                
                Date retiro_fecha = null;
                String retiro_motivo = "";
                String retiro_observacion = "";                                                
                
                if(fechai!=null)
                {
                    retiro_fecha= fechai.getFECHAinDate();
                    retiro_motivo=  new RHH_EVENTOS_HITO(con).getEvento(fechai.getID_EVENTO_HITO());
                    retiro_observacion=fechai.getDESCRIPCION();
                }                
                planilla.setFECHA_RETIRO_EMPRESA(retiro_fecha);            
                planilla.setMOTIVO_RETIRO(retiro_motivo);
                planilla.setOBSERVACION_RETIRO(retiro_observacion);                

                Calendar calendario = new GregorianCalendar();
                calendario.set(Calendar.YEAR,0);
                calendario.set(Calendar.MONTH,0);
                calendario.set(Calendar.DAY_OF_MONTH, 1);

                int anof = 0;
                int mesf = 0;
                int diaf = 0;
                if(ingreso!=null)
                {
                    Date fecha1=ingreso;
                    Date fecha2=new GregorianCalendar().getTime();
                    long diferencia = fecha2.getTime()-fecha1.getTime();
                    int dia = (int)(diferencia/(3600000*24));
                    calendario.add(Calendar.DAY_OF_MONTH, dia);
                    if(dia<365)
                        anof=0;
                    else
                        anof=calendario.get(Calendar.YEAR);

                    mesf = calendario.get(Calendar.MONTH);
                    diaf = calendario.get(Calendar.DAY_OF_MONTH);
                }           

                planilla.setANTIGUEDAD_DIA(diaf);
                planilla.setANTIGUEDAD_MES(mesf);
                planilla.setANTIGUEDAD_ANO(anof);

                String cargo = rs.getString("CARGO");
                cargo=cargo==null?"":cargo;
                
                planilla.setCARGO(cargo);
                
                int departamento = rs.getInt("DEPARTAMENTO");                
                planilla.setDEPARTAMENTO(departamento);

                int regional = rs.getInt("REGIONAL");                  
                planilla.setREGIONAL(regional);            

                int sucursal = rs.getInt("SUCURSAL");                
                planilla.setSUCURSAL(sucursal);            

                double salario=rs.getDouble("SALARIO");
                planilla.setSUELDO(salario);               

                List<RHH_FECHAS_HITO> incrementos = new RHH_FECHAS_HITO(con).Incrementos(id_usuairo);
                Double total_incrementos=0.0;
                for(RHH_FECHAS_HITO fecha:incrementos)
                {                            
                    total_incrementos+=fecha.getSALARIO();                    
                }
                planilla.setINCREMENTO_SALARIAL(total_incrementos);

                double sueldo_con_incremento=(salario+total_incrementos);
                planilla.setSUELDO_CON_INCREMENTO(sueldo_con_incremento);               
                
                Calendar fechaingreso = new GregorianCalendar();
                if(ingreso!=null)            
                fechaingreso.setTime(ingreso);

                Calendar fecha = new GregorianCalendar();
                fecha.set(Calendar.MONTH, mes_actual-1);
                fecha.set(Calendar.YEAR, ano_actual);
                int dias_mes=fecha.getActualMaximum(Calendar.DAY_OF_MONTH);
                planilla.setDIAS_MES(dias_mes);
                
                int dias_trabajados=dias_mes;
                int mes_ingreso = fechaingreso.get(Calendar.MONTH)+1;
                int ano_ingreso = fechaingreso.get(Calendar.YEAR);
                double salario_dias_trabajados = sueldo_con_incremento;
                if(mes_ingreso==mes_actual&&ano_ingreso==ano_actual)
                {
                    int dia = fechaingreso.get(Calendar.DAY_OF_MONTH);
                    dias_trabajados=dias_mes-dia;
                    salario_dias_trabajados = (sueldo_con_incremento/dias_mes)*dias_trabajados;
                }/*FECHA DE RETIRO*/
                
                planilla.setDIAS_TRABAJADOS(dias_trabajados);
                planilla.setSALARIO_DIAS_TRABAJADOS(salario_dias_trabajados);
                
                long milis1 = fechaingreso.getTimeInMillis();
                long milis2 = fechaactual.getTimeInMillis();
                long diff = milis2 - milis1;
                long diffDays = diff / (24 * 60 * 60 * 1000);

                int ano = (int) (diffDays/365);

                RHH_BONO_ANTIGUEDAD banti = new RHH_BONO_ANTIGUEDAD(con).sacarPorcentaje(ano);
                double porcentaje_antiguedad = banti.getPORCENTAJE()/100;

                CON_DATOS_EMPRESA datos_empresa = new CON_DATOS_EMPRESA(con).Buscar();

                int multiplic = datos_empresa.getBONO_ANTIGUEDAD();
                double salariominimo_nal = new RHH_SALARIO_MINIMO(con).salarioActual();

                double Bono_Antiguedad = porcentaje_antiguedad*(multiplic*salariominimo_nal);            
                planilla.setBONO_ANTIGUEDAD(Bono_Antiguedad);

                List<RHH_BONO_USUARIO> otros_Ingresos = new RHH_BONO_USUARIO(con).TodosxUsuarioconImpuesto(id_usuairo);
                double otro_ingreso=0.0;
                for(RHH_BONO_USUARIO bono:otros_Ingresos)
                {            
                    SimpleDateFormat formatomy = new SimpleDateFormat("MM/yyyy");
                    Calendar calini = new GregorianCalendar();
                    Calendar califin = new GregorianCalendar();
                    calini.setTime(bono.getFECHA_INId());
                    califin.setTime(bono.getFECHA_FINd());            

                    boolean ok = false;
                    while(calini.before(califin)||calini.equals(califin))
                    {
                        String fechaini = formatomy.format(calini.getTime());
                        String fechaact = formatomy.format(fechaactual.getTime());
                        if(fechaini.equals(fechaact))
                        {
                            ok=true;
                            break;
                        }
                        calini.add(Calendar.MONTH, 1);                   
                    }
                    
                    if(ok)
                    {                        
                        otro_ingreso +=bono.getMONTO();                        
                    }                                  
                    planilla.setOTROS_INGRESOS(otro_ingreso);
                }

                List<RHH_BONO_USUARIO> otros_Ingresos_sin_imp = new RHH_BONO_USUARIO(con).TodosxUsuarioSinImpuesto(id_usuairo);
                double otro_ingreso_sin_imp=0.0;
                for(RHH_BONO_USUARIO bono:otros_Ingresos_sin_imp)
                {            
                    SimpleDateFormat formatomy = new SimpleDateFormat("MM/yyyy");
                    Calendar calini = new GregorianCalendar();
                    Calendar califin = new GregorianCalendar();
                    calini.setTime(bono.getFECHA_INId());
                    califin.setTime(bono.getFECHA_FINd());            

                    Calendar actual = new GregorianCalendar();
                    boolean ok = false;
                    while(calini.before(califin)||calini.equals(califin))
                    {
                        String fechaini = formatomy.format(calini.getTime());
                        String fechaact = formatomy.format(actual.getTime());
                        if(fechaini.equals(fechaact))
                        {
                            ok=true;
                            break;
                        }
                        calini.add(Calendar.MONTH, 1);                   
                    }

                    if(ok)
                    {
                        otro_ingreso_sin_imp +=bono.getMONTO();                        
                    }
                    planilla.setOTROS_INGRESOS_NO_IMPONIBLES(otro_ingreso_sin_imp);
                }           

                double total_ganado = sueldo_con_incremento+Bono_Antiguedad+otro_ingreso;
                double total_ganado_no_imponible = total_ganado+otro_ingreso_sin_imp;            
                planilla.setTOTAL_GANADO_NO_IMPONIBLE(total_ganado_no_imponible);            
                planilla.setTOTAL_GANADO(total_ganado);

                RHH_PAGOS_QUINCENA_CABECERA cabe = new RHH_PAGOS_QUINCENA_CABECERA(con).Buscar(ano_actual, mes_actual);
                RHH_PAGOS_QUINCENA pagoquincena = null;
                if(cabe!=null)
                    pagoquincena = new RHH_PAGOS_QUINCENA(con).BuscarxCABEyus(cabe.getID(), id_usuairo);
                
                double montoquincena=0.0;
                if(pagoquincena!=null)
                {
                    if(cabe.getESTADO()!=1)
                        montoquincena=pagoquincena.getMONTO();
                }           
                planilla.setMONTO_PAGADO_QUINCENA(montoquincena);

                List<RHH_DEUDA> deudas_usr = new RHH_DEUDA(con).Todas_Anticipo_Pendientes(id_usuairo);
                double anticipo=0.0;
                for(RHH_DEUDA deuda:deudas_usr)
                {
                    int pagos_realizados=deuda.Cantidad_pagos_realizados();
                    int pagos_total=deuda.Cantidad_pagosXdeuda();
                    int pagos_restantes = pagos_total-pagos_realizados; 

                    Double total=deuda.TotalDeudaActual();
                    anticipo+= (total/pagos_restantes);                    
                }
                planilla.setANTICIPO(anticipo);

                double atrazos = 0.0;
                double faltas = 0.0;
                double sancion = 0.0;           

                planilla.setSANCION(sancion);

                Double descuento_celular = new RHH_PLANILLA_CELULAR(con).DescuentoUsrXanoYmes(ano_actual, mes_actual, ci);

                planilla.setDEUDA_CELULAR(descuento_celular);

                deudas_usr = new RHH_DEUDA(con).Todas_Descuento_Pendientes(id_usuairo);
                double descuento=0.0;
                for(RHH_DEUDA deuda:deudas_usr)
                {
                    int pagos_realizados=deuda.Cantidad_pagos_realizados();
                    int pagos_total=deuda.Cantidad_pagosXdeuda();
                    int pagos_restantes = pagos_total-pagos_realizados; 

                    Double total=deuda.TotalDeudaActual();
                    descuento+= (total/pagos_restantes);                    
                }                        
                planilla.setDEUDA_CELULAR(descuento);

                double total_ganado_sin_imp = total_ganado;

                double porc_largo_plazo=0.0;
                if(usuario_estado==0||usuario_estado==1)
                    porc_largo_plazo = datos_empresa.getPORCENTAJE_LARGO_PLAZO();
                if(usuario_estado==3 ||usuario_estado==4)
                    porc_largo_plazo = datos_empresa.getPORCENTAJE_JUBILADOS();
                
                double seguro_largo_plazo=total_ganado_sin_imp*(porc_largo_plazo/100);            
                planilla.setSEGURO_LARGO_PLAZO(seguro_largo_plazo);

                double porc_riesgo_comun = datos_empresa.getPORCENTAJE_RIESGO_COMUN();
                double riesgo_comun=total_ganado_sin_imp*(porc_riesgo_comun/100);            
                planilla.setRIESGO_COMUN(riesgo_comun);

                double porc_afp = datos_empresa.getPORCENTAJE_COMISION_AFP();
                double afp=total_ganado_sin_imp*(porc_afp/100);            
                planilla.setCOMISION_AFP(afp);

                double porc_solidario_asegurado = datos_empresa.getPORCENTAJE_SOLIDARIO();
                double solidario_asegurado=total_ganado_sin_imp*(porc_solidario_asegurado/100);            
                planilla.setSOLIDARIO_ASEGURADO(solidario_asegurado);

                double monto_SNA = datos_empresa.getMONTO_SOLIDARIO_NAC_A();
                double monto_SNB = datos_empresa.getMONTO_SOLIDARIO_NAC_B();
                double monto_SNC = datos_empresa.getMONTO_SOLIDARIO_NAC_C();
                double porc_SNA = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_A();
                double porc_SNB = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_B();
                double porc_SNC = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_C();

                double solidarion_nacional=0.0;

                if(total_ganado_sin_imp>=monto_SNA && total_ganado_sin_imp<monto_SNB)
                {
                    solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
                }
                if(total_ganado_sin_imp>=monto_SNB&&total_ganado_sin_imp<monto_SNC)
                {
                    solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
                    solidarion_nacional+=(total_ganado_sin_imp-monto_SNB)*(porc_SNB/100);
                }
                if(total_ganado_sin_imp>=monto_SNC)
                {
                    solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
                    solidarion_nacional+=(total_ganado_sin_imp-monto_SNB)*(porc_SNB/100);
                    solidarion_nacional+=(total_ganado_sin_imp-monto_SNC)*(porc_SNC/100);
                }

                planilla.setSOLIDARIO_NACIONAL(solidarion_nacional);

                Double total_aporte_laboral = seguro_largo_plazo+riesgo_comun+afp+solidario_asegurado+solidarion_nacional;            
                planilla.setTOTAL_APORTE_LABORAL(total_aporte_laboral);

                double porc_csbp = datos_empresa.getPORCENTAJE_CSBP_SEG_MED();
                double csbp=total_ganado_sin_imp*(porc_csbp/100);            
                planilla.setCSBP(csbp);

                double porc_afp_pro = datos_empresa.getPORCENTAJE_RISEGO_PROFESIONAL();
                double afp_pro=total_ganado_sin_imp*(porc_afp_pro/100);            
                planilla.setRIESGO_PROFESIONAL(afp_pro);

                double porc_aporte_pro = datos_empresa.getPORCENTAJE_APORTE_PRO();
                double aporte_pro=total_ganado_sin_imp*(porc_aporte_pro/100);            
                planilla.setPRO_VIVIENDA(aporte_pro);

                double porc_aporte_solidario = datos_empresa.getPORCENTAJE_SOLIDARIO();
                double aporte_solidario=total_ganado_sin_imp*(porc_aporte_solidario/100);            
                planilla.setAPORTE_SOLIDARIO(aporte_solidario);

                double total_aporte_patronal = csbp+afp_pro+aporte_pro+aporte_solidario;            
                planilla.setTOTAL_APORTE_PATRONAL(total_aporte_patronal);

                double salario_neto_sujeto_imp = total_ganado_sin_imp-total_aporte_laboral;            
                planilla.setSUELDO_NETO_SUJ_IMPUESTOS(salario_neto_sujeto_imp);

                double minimo_moinmp=salariominimo_nal*2;

                if(minimo_moinmp>=salario_neto_sujeto_imp)
                    minimo_moinmp=salario_neto_sujeto_imp;            
                planilla.setMINIMO_NO_IMPONIBLE(minimo_moinmp);

                double dif_sujeta_impuestos= salario_neto_sujeto_imp-minimo_moinmp;            
                planilla.setDIFERENCIA_SUJ_IMPUESTOS(dif_sujeta_impuestos);

                double imp_liquidado = dif_sujeta_impuestos*0.13;            
                planilla.setIMPUESTO_LIQUIDADO(imp_liquidado);

                double computo_iva_ddj=computo_iva;
                planilla.setCOMPUTO_IVA_DDJJ(computo_iva_ddj);

                double sobre_dos_salarios_minimos= 0.0;
                if(dif_sujeta_impuestos!=0)
                {
                    if(imp_liquidado<(0.13*(salariominimo_nal*2)))
                        sobre_dos_salarios_minimos=imp_liquidado;
                    else
                        sobre_dos_salarios_minimos=(0.13*(salariominimo_nal*2));
                }            
                planilla.setSOBRE_2_SALARIOS_MIN(sobre_dos_salarios_minimos);

                
                double saldo_favor =0.0;
                if((imp_liquidado-computo_iva_ddj-sobre_dos_salarios_minimos)<0)
                    saldo_favor=0.0;
                else
                    saldo_favor=(imp_liquidado-computo_iva_ddj-sobre_dos_salarios_minimos);            
                planilla.setSALDO_FAVOR(saldo_favor);

                double saldo_favor_empleado=0.0;
                if(sobre_dos_salarios_minimos>imp_liquidado)
                    saldo_favor_empleado=0.0;
                else
                {
                    if(sobre_dos_salarios_minimos+computo_iva_ddj-imp_liquidado<0)
                        saldo_favor_empleado=0.0;
                    else
                        saldo_favor_empleado=sobre_dos_salarios_minimos+computo_iva_ddj-imp_liquidado;
                }            
                planilla.setSALDO_FAVOR_EMPLEADO(saldo_favor_empleado);                               
                                
                planilla.setSALDO_MES_ANTERIOR(saldo_mes_anterior);

                CON_MONEDA moneda = new CON_MONEDA();
                moneda.setCon(con);           

                double moneda_inflacionaria_mes_anterior = ufv_mes_anterior;
                planilla.setUFV_MES_PASADO(moneda_inflacionaria_mes_anterior);
                
                double moneda_inflacionaria_actual = moneda.Buscar_Inflacionaria_actual();                            
                planilla.setUFV_MES_ACTUAL(moneda_inflacionaria_actual);

                double actualizacion = ((saldo_mes_anterior/moneda_inflacionaria_mes_anterior)*moneda_inflacionaria_actual)-saldo_mes_anterior;            
                planilla.setACTUALIZACION(actualizacion);

                double sub_total = saldo_mes_anterior+actualizacion;            
                planilla.setSUB_TOTAL(sub_total);

                double saldo_total_a_favor_empleado = saldo_favor_empleado+sub_total;            
                planilla.setSALDO_TOTAL_FAVOR_EMPLEADO(saldo_total_a_favor_empleado);

                double saldo_utilizado=0.0;            
                if(saldo_total_a_favor_empleado>saldo_favor)
                    saldo_utilizado=saldo_favor;
                else
                    saldo_utilizado=saldo_total_a_favor_empleado;           
                planilla.setSALDO_UTILIZADO(saldo_utilizado);

                double impuesto_retenido_pagar=0.0;            
                if(saldo_total_a_favor_empleado<saldo_favor)
                    impuesto_retenido_pagar=saldo_favor-saldo_total_a_favor_empleado;           
                planilla.setIMPUESTO_RETENIDO_PAGAR(impuesto_retenido_pagar);

                double saldo_favor_sigte_mes=0.0;            
                if(saldo_total_a_favor_empleado>saldo_favor)
                    saldo_favor_sigte_mes=saldo_total_a_favor_empleado-saldo_utilizado;           
                planilla.setSALDO_FAVOR_SIGUIENTE_MES(saldo_favor_sigte_mes);

                double total_desc_mes = anticipo+montoquincena+descuento+total_aporte_laboral+impuesto_retenido_pagar;//(falta atraso, faltas, sanciones, deuda celular)            
                planilla.setTOTAL_DESC_MES(total_desc_mes);

                double total_liquido_pagable_no_imponible =total_ganado_no_imponible-total_desc_mes;            
                planilla.setTOTAL_LIQUIDO_PAGABLE_IMPO(total_liquido_pagable_no_imponible);

                double monto_retro =0;
                
                RHH_PLANILLA_RETROACTIVO_CABE cabe_retro = new RHH_PLANILLA_RETROACTIVO_CABE(con).Buscar(ano_actual, mes_actual);
                if(cabe_retro!=null)
                {
                    RHH_PLANILLA_RETROACTIVOS retro = new RHH_PLANILLA_RETROACTIVOS(con).Buscar(cabe_retro.getID(), id_usuairo);
                    monto_retro = retro.getTOTAL_RETROACTIVO_PAGABLE();
                }
                
                planilla.setTOTAL_RETROACTIVOS(monto_retro);
                
                double total_liquido_pagable =total_ganado-total_desc_mes;            
                planilla.setTOTAL_LIQUIDO_PAGABLE(total_liquido_pagable);                 
                planilla.setID(id_planilla);
                planilla.Modificar();
                            
                String LUGAR_EMISION = rs.getString("LUGAR_EMISION");
                LUGAR_EMISION=LUGAR_EMISION==null?"":LUGAR_EMISION;
                String PRIMER_NOMBRE = rs.getString("PRIMER_NOMBRE");
                PRIMER_NOMBRE=PRIMER_NOMBRE==null?"":PRIMER_NOMBRE;
                String SEGUNDO_NOMBRE = rs.getString("SEGUNDO_NOMBRE");
                SEGUNDO_NOMBRE=SEGUNDO_NOMBRE==null?"":SEGUNDO_NOMBRE;
                String PRIMER_APELLIDO = rs.getString("PRIMER_APELLIDO");
                PRIMER_APELLIDO=PRIMER_APELLIDO==null?"":PRIMER_APELLIDO;
                String SEGUNDO_APELLIDO = rs.getString("SEGUNDO_APELLIDO");
                SEGUNDO_APELLIDO=SEGUNDO_APELLIDO==null?"":SEGUNDO_APELLIDO;
                String TELEFONO = rs.getString("TELEFONO");
                TELEFONO=TELEFONO==null?"":TELEFONO;
                String EMAIL = rs.getString("EMAIL");
                EMAIL=EMAIL==null?"":EMAIL;

                html+="<td>"+ci+"</td>";
                html+="<td>"+LUGAR_EMISION+"</td>";
                html+="<td>"+PRIMER_NOMBRE+"</td>";
                html+="<td>"+SEGUNDO_NOMBRE+"</td>";
                html+="<td>"+PRIMER_APELLIDO+"</td>";
                html+="<td>"+SEGUNDO_APELLIDO+"</td>";            
                html+="<td>"+TELEFONO+"</td>";
                html+="<td>"+EMAIL+"</td>";           
                html+="<td><a href='#' onclick='pop_profecion("+ci+");'>VER</a></td>";                
                if(ingreso!=null)
                    html+="<td>"+formato.format(ingreso)+"</td>";
                else
                    html+="<td></td>";
                
                if(retiro_fecha!=null)
                    html+="<td>"+formato.format(retiro_fecha)+"</td>";
                else
                    html+="<td></td>";
                html+="<td>"+retiro_motivo+"</td>";        
                html+="<td>"+retiro_observacion+"</td>";
                html+="<td>"+diaf+"</td>";
                html+="<td>"+mesf+"</td>";
                html+="<td>"+anof+"</td>";
                html+="<td>"+cargo+"</td>";
                String depto="***";
                if(departamento!=0)
                    depto = new RHH_DEPARTAMENTO(con).BuscarXid(departamento).getDESCRIPCION();
                html+="<td>"+depto+"</td>";
                
                String reg="***";
                if(regional!=0)
                    reg = new RHH_REGIONAL(con).BuscarXid(regional).getDESCRIPCION();
                html+="<td>"+reg+"</td>";
                
                String suc="***";
                if(sucursal!=0)
                    suc = new RHH_SUCURSAL(con).BuscarXid(sucursal).getDESCRIPCION();
                html+="<td>"+suc+"</td>";
                html+="<td>"+salario+"</td>";
                html+="<td>"+total_incrementos+"</td>";                
                html+="<td>"+dias_mes+"</td>";
                html+="<td>"+dias_trabajados+"</td>";                           
                html+="<td>"+sueldo_con_incremento+"</td>";
                html+="<td>"+salario_dias_trabajados+"</td>";
                html+="<td>"+Bono_Antiguedad+"</td>";
                html+="<td>"+otro_ingreso+"</td>";
                html+="<td>"+otro_ingreso_sin_imp+"</td>";
                html+="<td>"+total_ganado_no_imponible+"</td>";
                html+="<td>"+total_ganado+"</td>";
                html+="<td>"+montoquincena+"</td>";
                html+="<td>"+anticipo+"</td>";
                html+="<td>"+atrazos+"</td>";
                html+="<td>"+faltas+"</td>";
                html+="<td>"+sancion+"</td>";
                html+="<td>"+descuento_celular+"</td>";
                html+="<td>"+descuento+"</td>";
                html+="<td>"+seguro_largo_plazo+"</td>";
                html+="<td>"+riesgo_comun+"</td>";
                html+="<td>"+afp+"</td>";
                html+="<td>"+solidario_asegurado+"</td>";
                html+="<td>"+solidarion_nacional+"</td>";
                html+="<td>"+total_aporte_laboral+"</td>";
                html+="<td>"+csbp+"</td>";
                html+="<td>"+afp_pro+"</td>";
                html+="<td>"+aporte_pro+"</td>";
                html+="<td>"+aporte_solidario+"</td>";
                html+="<td>"+total_aporte_patronal+"</td>";
                html+="<td>"+salario_neto_sujeto_imp+"</td>";
                html+="<td>"+minimo_moinmp+"</td>";
                html+="<td>"+dif_sujeta_impuestos+"</td>";
                html+="<td>"+imp_liquidado+"</td>";
                html+="<td><input type='number' data-id='"+id_planilla+"' onblur='computo_iva_sin_ddjj(this);' value='"+computo_iva_ddj+"' min='0'/> </td>";
                html+="<td>"+sobre_dos_salarios_minimos+"</td>";
                html+="<td>"+saldo_favor+"</td>";
                html+="<td>"+saldo_favor_empleado+"</td>";
                html+="<td><input type='number' data-id='"+id_planilla+"' onblur='saldo_mes_anterior(this);' value='"+saldo_mes_anterior+"' min='0'/> </td>";
                html+="<td><input type='number' data-id='"+id_planilla+"' onblur='moneda_inflacionaria_mes_anterior(this);' value='"+moneda_inflacionaria_mes_anterior+"' min='0'/> </td>";                
                html+="<td>"+moneda_inflacionaria_actual+"</td>";
                html+="<td>"+actualizacion+"</td>";
                html+="<td>"+sub_total+"</td>";
                html+="<td>"+saldo_total_a_favor_empleado+"</td>";
                html+="<td>"+saldo_utilizado+"</td>";
                html+="<td>"+impuesto_retenido_pagar+"</td>";
                html+="<td>"+saldo_favor_sigte_mes+"</td>";
                html+="<td>"+total_desc_mes+"</td>";                                                     
                html+="<td>"+planilla.getTOTAL_RETROACTIVOS()+"</td>";
                html+="<td>"+(total_liquido_pagable_no_imponible-total_liquido_pagable)+"</td>";
                html+="<td>"+total_liquido_pagable+"</td>";                
            }
            con.commit();
            return html;
        }
        catch(SQLException e)
        {
            con.rollback();
            e.printStackTrace();
            return "";
        }       
    }    
    private String abrirPlanilla(int ano, int mes, Conexion con) throws SQLException{
        String html="";        
        String consulta = "SELECT RHH_USUARIO.ID,RHH_PERSONA.CI,\n" +
                        "       RHH_PERSONA.LUGAR_EMISION,\n" +
                        "       RHH_PERSONA.PRIMER_NOMBRE,\n" +
                        "       RHH_PERSONA.SEGUNDO_NOMBRE,\n" +
                        "       RHH_PERSONA.PRIMER_APELLIDO,\n" +
                        "       RHH_PERSONA.SEGUNDO_APELLIDO,\n" +
                        "       RHH_PERSONA.TELEFONO,\n" +
                        "       RHH_PERSONA.EMAIL,\n" +
                        "       RHH_FECHAS_HITO.FECHA,\n" +
                        "       RHH_CARGO.DESCRIPCION CARGO,\n" +
                        "       RHH_DEPARTAMENTO.DESCRIPCION DEPARTAMENTO,\n" +
                        "       RHH_REGIONAL.DESCRIPCION REGIONAL,\n" +
                        "       RHH_SUCURSAL.DESCRIPCION SUCURSAL,\n" +
                        "       RHH_FECHAS_HITO.SALARIO\n" +
                        "  FROM BROKER.RHH_CARGO,\n" +
                        "       BROKER.RHH_USUARIO,\n" +
                        "       BROKER.RHH_PERSONA,\n" +
                        "       BROKER.RHH_FECHAS_HITO,\n" +
                        "       BROKER.RHH_CARGO_DEP_REG_SUC,\n" +
                        "       BROKER.RHH_DEPARTAMENTO,\n" +
                        "       BROKER.RHH_REGIONAL,\n" +
                        "       BROKER.RHH_SUCURSAL,\n" +
                        "       BROKER.RHH_PLANILLA_PROVISION_EMPLE,\n" +
                        "       BROKER.RHH_PLANILLA_PROVISION_EMP_CAB\n" +
                        " WHERE     (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                        "       AND (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n" +
                        "       AND (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_CARGO = RHH_CARGO.ID)\n" +
                        "       AND (RHH_PLANILLA_PROVISION_EMPLE.ID_USUARIO = RHH_USUARIO.ID)\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_DEPTO = RHH_DEPARTAMENTO.ID(+))\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_REGIONAL = RHH_REGIONAL.ID(+))\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_SUCURSAL = RHH_SUCURSAL.ID(+))\n" +
                        "       AND (RHH_FECHAS_HITO.ID_EVENTO_HITO = 3)\n" +
                        "       AND (RHH_PLANILLA_PROVISION_EMP_CAB.ANO = "+ano+")\n" +
                        "       AND (RHH_PLANILLA_PROVISION_EMP_CAB.MES = "+mes+")\n" +
                        "       AND (RHH_PLANILLA_PROVISION_EMP_CAB.ID=RHH_PLANILLA_PROVISION_EMPLE.ID_CABECERA)\n" +
                        "       ORDER BY RHH_PERSONA.PRIMER_APELLIDO";
        
        ResultSet rs = con.EjecutarConsulta(consulta);
        
        while(rs.next())
        {
            int idusuario= rs.getInt("ID");
            int ci = rs.getInt("CI");                       
            Date ingreso = rs.getDate("FECHA");            
            
            html+="<tr>";
            String LUGAR_EMISION = rs.getString("LUGAR_EMISION");
            LUGAR_EMISION=LUGAR_EMISION==null?"":LUGAR_EMISION;
            String PRIMER_NOMBRE = rs.getString("PRIMER_NOMBRE");
            PRIMER_NOMBRE=PRIMER_NOMBRE==null?"":PRIMER_NOMBRE;
            String SEGUNDO_NOMBRE = rs.getString("SEGUNDO_NOMBRE");
            SEGUNDO_NOMBRE=SEGUNDO_NOMBRE==null?"":SEGUNDO_NOMBRE;
            String PRIMER_APELLIDO = rs.getString("PRIMER_APELLIDO");
            PRIMER_APELLIDO=PRIMER_APELLIDO==null?"":PRIMER_APELLIDO;
            String SEGUNDO_APELLIDO = rs.getString("SEGUNDO_APELLIDO");
            SEGUNDO_APELLIDO=SEGUNDO_APELLIDO==null?"":SEGUNDO_APELLIDO;
            String TELEFONO = rs.getString("TELEFONO");
            TELEFONO=TELEFONO==null?"":TELEFONO;
            String EMAIL = rs.getString("EMAIL");
            EMAIL=EMAIL==null?"":EMAIL;            
            SimpleDateFormat formato = new SimpleDateFormat("dd MMMM yyyy");            
            RHH_PLANILLA_PROVISION_EMPLE planilla = new RHH_PLANILLA_PROVISION_EMPLE(con).BuscarxUSUARIO(ano, mes, idusuario);                        

            String retiro_fecha= planilla.getFECHA_RETIRO_EMPRESAconformato();
            String retiro_motivo=  planilla.getMOTIVO_RETIRO();
            String retiro_observacion= planilla.getOBSERVACION_RETIRO();
            
            int anof = planilla.getANTIGUEDAD_ANO();
            int mesf = planilla.getANTIGUEDAD_MES();
            int diaf = planilla.getANTIGUEDAD_DIA();                       
            String CARGO = rs.getString("CARGO");
            CARGO=CARGO==null?"":CARGO;
            String DEPARTAMENTO = rs.getString("DEPARTAMENTO");
            DEPARTAMENTO=DEPARTAMENTO==null?"":DEPARTAMENTO;
            String REGIONAL = rs.getString("REGIONAL");
            REGIONAL=REGIONAL==null?"":REGIONAL;
            String SUCURSAL = rs.getString("SUCURSAL");
            SUCURSAL=SUCURSAL==null?"":SUCURSAL;                        
            double salario=rs.getDouble("SALARIO");                        
            Double total_incrementos=planilla.getINCREMENTO_SALARIAL();
            double Bono_Antiguedad = planilla.getBONO_ANTIGUEDAD();                        
            double otro_ingreso=planilla.getOTROS_INGRESOS();
            double otro_ingreso_sin_imp=planilla.getOTROS_INGRESOS_NO_IMPONIBLES();
            double total_ganado = planilla.getTOTAL_GANADO();
            double total_ganado_no_imponible = total_ganado+otro_ingreso_sin_imp;
            double montoquincena=planilla.getMONTO_PAGADO_QUINCENA();
            double anticipo=planilla.getANTICIPO();
            double atrazos = 0.0;
            double faltas = 0.0;
            double sancion = 0.0;
            Double descuento_celular = planilla.getDEUDA_CELULAR();            
            double descuento_planilla=planilla.getDEUDA_CELULAR();
            double seguro_largo_plazo=planilla.getSEGURO_LARGO_PLAZO();                            
            double riesgo_comun=planilla.getRIESGO_COMUN();            
            double afp=planilla.getCOMISION_AFP();            
            double solidario_asegurado=planilla.getSOLIDARIO_ASEGURADO();
            
            html+="<td>"+ci+"</td>";
            html+="<td>"+LUGAR_EMISION+"</td>";
            html+="<td>"+PRIMER_NOMBRE+"</td>";
            html+="<td>"+SEGUNDO_NOMBRE+"</td>";
            html+="<td>"+PRIMER_APELLIDO+"</td>";
            html+="<td>"+SEGUNDO_APELLIDO+"</td>";            
            html+="<td>"+TELEFONO+"</td>";
            html+="<td>"+EMAIL+"</td>";
            html+="<td><a href='#' onclick='pop_profecion("+ci+");'>VER</a></td>";
            if(ingreso!=null)
                html+="<td>"+formato.format(ingreso)+"</td>";
            else
                html+="<td></td>";            
            
            html+="<td>"+retiro_fecha+"</td>";                            
            html+="<td>"+retiro_motivo+"</td>";        
            html+="<td>"+retiro_observacion+"</td>";
            html+="<td>"+diaf+"</td>";
            html+="<td>"+mesf+"</td>";
            html+="<td>"+anof+"</td>";
            html+="<td>"+CARGO+"</td>";
            html+="<td>"+DEPARTAMENTO+"</td>";
            html+="<td>"+REGIONAL+"</td>";
            html+="<td>"+SUCURSAL+"</td>";
            html+="<td>"+salario+"</td>";
            html+="<td>"+total_incrementos+"</td>";                        
            html+="<td>"+planilla.getDIAS_MES()+"</td>";
            html+="<td>"+planilla.getDIAS_TRABAJADOS()+"</td>";                           
            html+="<td>"+planilla.getSUELDO_CON_INCREMENTO()+"</td>";
            html+="<td>"+planilla.getSALARIO_DIAS_TRABAJADOS()+"</td>";
            html+="<td>"+Bono_Antiguedad+"</td>";                
            html+="<td>"+otro_ingreso+"</td>";
            html+="<td>"+otro_ingreso_sin_imp+"</td>";
            html+="<td>"+total_ganado_no_imponible+"</td>";                
            html+="<td>"+total_ganado+"</td>";                
            html+="<td>"+montoquincena+"</td>";
            html+="<td>"+anticipo+"</td>";
            html+="<td>"+atrazos+"</td>";
            html+="<td>"+faltas+"</td>";
            html+="<td>"+sancion+"</td>";
            html+="<td>"+descuento_celular+"</td>";
            html+="<td>"+descuento_planilla+"</td>";
            html+="<td>"+seguro_largo_plazo+"</td>";
            html+="<td>"+riesgo_comun+"</td>";
            html+="<td>"+afp+"</td>";
            html+="<td>"+solidario_asegurado+"</td>";                
            html+="<td>"+planilla.getSOLIDARIO_NACIONAL()+"</td>";
            html+="<td>"+planilla.getTOTAL_APORTE_LABORAL()+"</td>";
            html+="<td>"+planilla.getCSBP()+"</td>";               
            html+="<td>"+planilla.getRIESGO_PROFESIONAL()+"</td>";
            html+="<td>"+planilla.getPRO_VIVIENDA()+"</td>";               
            html+="<td>"+planilla.getAPORTE_SOLIDARIO()+"</td>";                               
            html+="<td>"+planilla.getTOTAL_APORTE_PATRONAL()+"</td>";                               
            html+="<td>"+planilla.getSUELDO_NETO_SUJ_IMPUESTOS()+"</td>";                
            html+="<td>"+planilla.getMINIMO_NO_IMPONIBLE()+"</td>";
            html+="<td>"+planilla.getDIFERENCIA_SUJ_IMPUESTOS()+"</td>";
            html+="<td>"+planilla.getIMPUESTO_LIQUIDADO()+"</td>";
            RHH_PLANILLA_PROVISION_EMP_CAB ca = new RHH_PLANILLA_PROVISION_EMP_CAB(con).Buscar(ano, mes);                
                
            if(ca.getESTADO()==1)
                html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='computo_iva_sin_ddjj(this);' value='"+planilla.getCOMPUTO_IVA_DDJJ()+"' min='0'/> </td>";
            else
                html+="<td>"+planilla.getCOMPUTO_IVA_DDJJ()+"</td>";
            html+="<td>"+planilla.getSOBRE_2_SALARIOS_MIN()+"</td>";                                
            html+="<td>"+planilla.getSALDO_FAVOR()+"</td>";
            html+="<td>"+planilla.getSALDO_FAVOR_EMPLEADO()+"</td>";                           
            if(ca.getESTADO()!=1)
            {
                html+="<td>"+planilla.getSALDO_MES_ANTERIOR()+"</td>";
                html+="<td>"+planilla.getUFV_MES_PASADO()+"</td>";
            }
            else
            {
                html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='saldo_mes_anterior(this);' value='"+planilla.getSALDO_MES_ANTERIOR()+"' min='0'/> </td>";
                html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='saldo_mes_anterior(this);' value='"+planilla.getUFV_MES_PASADO()+"' min='0'/> </td>";                
            }                        
            html+="<td>"+planilla.getUFV_MES_ACTUAL()+"</td>";                
            html+="<td>"+planilla.getACTUALIZACION()+"</td>";                
            html+="<td>"+planilla.getSUB_TOTAL()+"</td>";                
            html+="<td>"+planilla.getSALDO_TOTAL_FAVOR_EMPLEADO()+"</td>";               
            html+="<td>"+planilla.getSALDO_UTILIZADO()+"</td>";                
            html+="<td>"+planilla.getIMPUESTO_RETENIDO_PAGAR()+"</td>";                
            html+="<td>"+planilla.getSALDO_FAVOR_SIGUIENTE_MES()+"</td>";                
            html+="<td>"+planilla.getTOTAL_DESC_MES()+"</td>";
            html+="<td>"+planilla.getTOTAL_RETROACTIVOS()+"</td>";
            html+="<td>"+(planilla.getTOTAL_LIQUIDO_PAGABLE_IMPO()-planilla.getTOTAL_LIQUIDO_PAGABLE())+"</td>";
            html+="<td>"+planilla.getTOTAL_LIQUIDO_PAGABLE()+"</td>";
            html+="</tr>";
        }
        return html;
    }
    private String abrirPlanilla_mod(int ano, int mes, Conexion con) throws SQLException{
        String html="";
        String consulta = "SELECT RHH_USUARIO.ID,RHH_PERSONA.CI,\n" +
                        "       RHH_PERSONA.LUGAR_EMISION,\n" +
                        "       RHH_PERSONA.PRIMER_NOMBRE,\n" +
                        "       RHH_PERSONA.SEGUNDO_NOMBRE,\n" +
                        "       RHH_PERSONA.PRIMER_APELLIDO,\n" +
                        "       RHH_PERSONA.SEGUNDO_APELLIDO,\n" +
                        "       RHH_PERSONA.TELEFONO,\n" +
                        "       RHH_PERSONA.EMAIL,\n" +
                        "       RHH_FECHAS_HITO.FECHA,\n" +
                        "       RHH_CARGO.DESCRIPCION CARGO,\n" +
                        "       RHH_DEPARTAMENTO.DESCRIPCION DEPARTAMENTO,\n" +
                        "       RHH_REGIONAL.DESCRIPCION REGIONAL,\n" +
                        "       RHH_SUCURSAL.DESCRIPCION SUCURSAL,\n" +
                        "       RHH_FECHAS_HITO.SALARIO\n" +
                        "  FROM BROKER.RHH_CARGO,\n" +
                        "       BROKER.RHH_USUARIO,\n" +
                        "       BROKER.RHH_PERSONA,\n" +
                        "       BROKER.RHH_FECHAS_HITO,\n" +
                        "       BROKER.RHH_CARGO_DEP_REG_SUC,\n" +
                        "       BROKER.RHH_DEPARTAMENTO,\n" +
                        "       BROKER.RHH_REGIONAL,\n" +
                        "       BROKER.RHH_SUCURSAL,\n" +
                        "       BROKER.RHH_PLANILLA_PROVISION_EMPLE,\n" +
                        "       BROKER.RHH_PLANILLA_PROVISION_EMP_CAB\n" +
                        " WHERE     (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                        "       AND (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n" +
                        "       AND (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_CARGO = RHH_CARGO.ID)\n" +
                        "       AND (RHH_PLANILLA_PROVISION_EMPLE.ID_USUARIO = RHH_USUARIO.ID)\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_DEPTO = RHH_DEPARTAMENTO.ID(+))\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_REGIONAL = RHH_REGIONAL.ID(+))\n" +
                        "       AND (RHH_CARGO_DEP_REG_SUC.ID_SUCURSAL = RHH_SUCURSAL.ID(+))\n" +
                        "       AND (RHH_FECHAS_HITO.ID_EVENTO_HITO = 3)\n" +
                        "       AND (RHH_PLANILLA_PROVISION_EMP_CAB.ANO = "+ano+")\n" +
                        "       AND (RHH_PLANILLA_PROVISION_EMP_CAB.MES = "+mes+")\n" +
                        "       AND (RHH_PLANILLA_PROVISION_EMP_CAB.ID=RHH_PLANILLA_PROVISION_EMPLE.ID_CABECERA)\n" +
                        "       ORDER BY RHH_PERSONA.PRIMER_APELLIDO";
        
        ResultSet rs = con.EjecutarConsulta(consulta);
        
        while(rs.next())
        {
            int idusuario= rs.getInt("ID");
            int ci = rs.getInt("CI");                       
            Date ingreso = rs.getDate("FECHA");            
            
            html+="<tr>";
            String LUGAR_EMISION = rs.getString("LUGAR_EMISION");
            LUGAR_EMISION=LUGAR_EMISION==null?"":LUGAR_EMISION;
            String PRIMER_NOMBRE = rs.getString("PRIMER_NOMBRE");
            PRIMER_NOMBRE=PRIMER_NOMBRE==null?"":PRIMER_NOMBRE;
            String SEGUNDO_NOMBRE = rs.getString("SEGUNDO_NOMBRE");
            SEGUNDO_NOMBRE=SEGUNDO_NOMBRE==null?"":SEGUNDO_NOMBRE;
            String PRIMER_APELLIDO = rs.getString("PRIMER_APELLIDO");
            PRIMER_APELLIDO=PRIMER_APELLIDO==null?"":PRIMER_APELLIDO;
            String SEGUNDO_APELLIDO = rs.getString("SEGUNDO_APELLIDO");
            SEGUNDO_APELLIDO=SEGUNDO_APELLIDO==null?"":SEGUNDO_APELLIDO;
            String TELEFONO = rs.getString("TELEFONO");
            TELEFONO=TELEFONO==null?"":TELEFONO;
            String EMAIL = rs.getString("EMAIL");
            EMAIL=EMAIL==null?"":EMAIL;            
            SimpleDateFormat formato = new SimpleDateFormat("dd MMMM yyyy");            
            RHH_PLANILLA_PROVISION_EMPLE planilla = new RHH_PLANILLA_PROVISION_EMPLE(con).BuscarxUSUARIO(ano, mes, idusuario);                        

            String retiro_fecha= planilla.getFECHA_RETIRO_EMPRESAconformato();
            String retiro_motivo=  planilla.getMOTIVO_RETIRO();
            String retiro_observacion= planilla.getOBSERVACION_RETIRO();
            
            int anof = planilla.getANTIGUEDAD_ANO();
            int mesf = planilla.getANTIGUEDAD_MES();
            int diaf = planilla.getANTIGUEDAD_DIA();                       
            String CARGO = rs.getString("CARGO");
            CARGO=CARGO==null?"":CARGO;
            String DEPARTAMENTO = rs.getString("DEPARTAMENTO");
            DEPARTAMENTO=DEPARTAMENTO==null?"":DEPARTAMENTO;
            String REGIONAL = rs.getString("REGIONAL");
            REGIONAL=REGIONAL==null?"":REGIONAL;
            String SUCURSAL = rs.getString("SUCURSAL");
            SUCURSAL=SUCURSAL==null?"":SUCURSAL;                        
            double salario=rs.getDouble("SALARIO");                        
            Double total_incrementos=planilla.getINCREMENTO_SALARIAL();
            double Bono_Antiguedad = planilla.getBONO_ANTIGUEDAD();                        
            double otro_ingreso=planilla.getOTROS_INGRESOS();
            double otro_ingreso_sin_imp=planilla.getOTROS_INGRESOS_NO_IMPONIBLES();
            double total_ganado = planilla.getTOTAL_GANADO();
            double total_ganado_no_imponible = total_ganado+otro_ingreso_sin_imp;
            double montoquincena=planilla.getMONTO_PAGADO_QUINCENA();
            double anticipo=planilla.getANTICIPO();
            double atrazos = 0.0;
            double faltas = 0.0;
            double sancion = 0.0;
            Double descuento_celular = planilla.getDEUDA_CELULAR();            
            double descuento_planilla=planilla.getDEUDA_CELULAR();
            double seguro_largo_plazo=planilla.getSEGURO_LARGO_PLAZO();                            
            double riesgo_comun=planilla.getRIESGO_COMUN();            
            double afp=planilla.getCOMISION_AFP();            
            double solidario_asegurado=planilla.getSOLIDARIO_ASEGURADO();
            
            html+="<td>"+ci+"</td>";
            html+="<td>"+LUGAR_EMISION+"</td>";
            html+="<td>"+PRIMER_NOMBRE+"</td>";
            html+="<td>"+SEGUNDO_NOMBRE+"</td>";
            html+="<td>"+PRIMER_APELLIDO+"</td>";
            html+="<td>"+SEGUNDO_APELLIDO+"</td>";            
            html+="<td>"+TELEFONO+"</td>";
            html+="<td>"+EMAIL+"</td>";
            html+="<td><a href='#' onclick='pop_profecion("+ci+");'>VER</a></td>";
            if(ingreso!=null)
                html+="<td>"+formato.format(ingreso)+"</td>";
            else
                html+="<td></td>";            
            html+="<td>"+retiro_fecha+"</td>";                            
            html+="<td>"+retiro_motivo+"</td>";        
            html+="<td>"+retiro_observacion+"</td>";
            html+="<td>"+diaf+"</td>";
            html+="<td>"+mesf+"</td>";
            html+="<td>"+anof+"</td>";
            html+="<td>"+CARGO+"</td>";
            html+="<td>"+DEPARTAMENTO+"</td>";
            html+="<td>"+REGIONAL+"</td>";
            html+="<td>"+SUCURSAL+"</td>";
            html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+salario+"' min='0'/></td>";
            html+="<td>"+total_incrementos+"</td>";
            html+="<td>"+planilla.getDIAS_MES()+"</td>";
            html+="<td>"+planilla.getDIAS_TRABAJADOS()+"</td>";                           
            html+="<td>"+planilla.getSUELDO_CON_INCREMENTO()+"</td>";
            html+="<td>"+planilla.getSALARIO_DIAS_TRABAJADOS()+"</td>";
            html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+Bono_Antiguedad+"' min='0'/></td>";
            html+="<td>"+otro_ingreso+"</td>";
            html+="<td>"+otro_ingreso_sin_imp+"</td>";
            html+="<td>"+total_ganado_no_imponible+"</td>";  
            html+="<td>"+total_ganado+"</td>";   
            html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+montoquincena+"' min='0'/></td>";
            html+="<td>"+anticipo+"</td>";
            html+="<td>"+atrazos+"</td>";
            html+="<td>"+faltas+"</td>";
            html+="<td>"+sancion+"</td>";
            html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+descuento_celular+"' min='0'/></td>";
            html+="<td>"+descuento_planilla+"</td>";
            html+="<td>"+seguro_largo_plazo+"</td>";
            html+="<td>"+riesgo_comun+"</td>";
            html+="<td>"+afp+"</td>";
            html+="<td>"+solidario_asegurado+"</td>";
            html+="<td>"+planilla.getSOLIDARIO_NACIONAL()+"</td>";
            html+="<td>"+planilla.getTOTAL_APORTE_LABORAL()+"</td>";
            html+="<td>"+planilla.getCSBP()+"</td>";
            html+="<td>"+planilla.getRIESGO_PROFESIONAL()+"</td>";
            html+="<td>"+planilla.getPRO_VIVIENDA()+"</td>";
            html+="<td>"+planilla.getAPORTE_SOLIDARIO()+"</td>";
            html+="<td>"+planilla.getTOTAL_APORTE_PATRONAL()+"</td>";
            html+="<td>"+planilla.getSUELDO_NETO_SUJ_IMPUESTOS()+"</td>";
            html+="<td>"+planilla.getMINIMO_NO_IMPONIBLE()+"</td>";
            html+="<td>"+planilla.getDIFERENCIA_SUJ_IMPUESTOS()+"</td>";
            html+="<td>"+planilla.getIMPUESTO_LIQUIDADO()+"</td>";            
            html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+planilla.getCOMPUTO_IVA_DDJJ()+"' min='0'/> </td>";
            html+="<td>"+planilla.getSOBRE_2_SALARIOS_MIN()+"</td>";                                
            html+="<td>"+planilla.getSALDO_FAVOR()+"</td>";
            html+="<td>"+planilla.getSALDO_FAVOR_EMPLEADO()+"</td>";
            html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+planilla.getSALDO_MES_ANTERIOR()+"' min='0'/></td>";
            html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+planilla.getUFV_MES_PASADO()+"' min='0'/></td>";
            html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+planilla.getUFV_MES_ACTUAL()+"' min='0'/></td>";             
            html+="<td>"+planilla.getACTUALIZACION()+"</td>";                
            html+="<td>"+planilla.getSUB_TOTAL()+"</td>";                
            html+="<td>"+planilla.getSALDO_TOTAL_FAVOR_EMPLEADO()+"</td>";               
            html+="<td>"+planilla.getSALDO_UTILIZADO()+"</td>";                
            html+="<td>"+planilla.getIMPUESTO_RETENIDO_PAGAR()+"</td>";                
            html+="<td>"+planilla.getSALDO_FAVOR_SIGUIENTE_MES()+"</td>";                
            html+="<td>"+planilla.getTOTAL_DESC_MES()+"</td>";
            html+="<td>"+planilla.getTOTAL_RETROACTIVOS()+"</td>";
            html+="<td>"+(planilla.getTOTAL_LIQUIDO_PAGABLE_IMPO()-planilla.getTOTAL_LIQUIDO_PAGABLE())+"</td>";
            html+="<td>"+planilla.getTOTAL_LIQUIDO_PAGABLE()+"</td>";
            html+="</tr>";
        }
        return html;
    }
    private String generar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));        
        new RHH_PLANILLA_PROVISION_EMPLE(con).generar(ano, mes);
        List<RHH_PLANILLA_PROVISION_EMPLE> lista = new RHH_PLANILLA_PROVISION_EMPLE(con).BuscarXfecha(ano, mes);
        for(RHH_PLANILLA_PROVISION_EMPLE planilla:lista)
        {
            double debito = planilla.getIMPUESTO_RETENIDO_PAGAR();
            double credito = planilla.getSALDO_FAVOR_SIGUIENTE_MES();
            RHH_CREDITO_FISCAL credito_fiscal = new RHH_CREDITO_FISCAL(con);
            credito_fiscal.setID_USUARIO(planilla.getID_USUARIO());
            credito_fiscal.setDEBITO(debito);
            credito_fiscal.setCREDITO(credito);
            credito_fiscal.Insertar();
            if(debito>credito)
            {
                double resto = debito-credito;
                credito_fiscal.setCREDITO(resto);
                credito_fiscal.setDEBITO(0);
                credito_fiscal.Insertar();
            }
        }
        return "GENERADO CORRECTAMENTE";
    }   
    private String aperturar_planilla(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));        
        new RHH_PLANILLA_PROVISION_EMPLE(con).Abrir(mes,ano);
        return "true";
    }        
    private String modificar(HttpServletRequest request, Conexion con) throws SQLException, ParseException {
        int id_planilla = Integer.parseInt(request.getParameter("id_planilla"));
        double salario = Double.parseDouble(request.getParameter("salario"));
        double bono_ant = Double.parseDouble(request.getParameter("bono_ant"));
        double quincena = Double.parseDouble(request.getParameter("quincena"));
        double deuda_cel = Double.parseDouble(request.getParameter("deuda_cel"));
        double computo_iva = Double.parseDouble(request.getParameter("computo_iva"));
        double saldo_mes_ant = Double.parseDouble(request.getParameter("saldo_mes_ant"));
        double moneda_inflacionaria_mes_anterior = Double.parseDouble(request.getParameter("moneda_inflacionaria_mes_anterior"));        
        double moneda_inflacionaria_actual = Double.parseDouble(request.getParameter("moneda_inflacionaria_actual"));        
        
        RHH_PLANILLA_PROVISION_EMPLE planilla = new RHH_PLANILLA_PROVISION_EMPLE(con).Buscar(id_planilla);
        int id_usuairo = planilla.getID_USUARIO();
        planilla.setID_USUARIO(id_usuairo);
        RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID_Usuario(id_usuairo);
        int ci = per.getCI();

        Date ingreso = planilla.getFECHA_INGRESO_EMPRESAindate();        

        RHH_FECHAS_HITO fechai = new RHH_FECHAS_HITO(con).retiro(id_usuairo);                
        Date retiro_fecha = null;
        String retiro_motivo = "";
        String retiro_observacion = "";                                                

        if(fechai!=null)
        {
            retiro_fecha= fechai.getFECHAinDate();
            retiro_motivo=  new RHH_EVENTOS_HITO(con).getEvento(fechai.getID_EVENTO_HITO());
            retiro_observacion=fechai.getDESCRIPCION();
        }                
        planilla.setFECHA_RETIRO_EMPRESA(retiro_fecha);            
        planilla.setMOTIVO_RETIRO(retiro_motivo);
        planilla.setOBSERVACION_RETIRO(retiro_observacion);

        Calendar calendario = new GregorianCalendar();
        calendario.set(Calendar.YEAR,0);
        calendario.set(Calendar.MONTH,0);
        calendario.set(Calendar.DAY_OF_MONTH, 1);

        int anof = planilla.getANTIGUEDAD_DIA();
        int mesf = planilla.getANTIGUEDAD_MES();
        int diaf = planilla.getANTIGUEDAD_ANO();                                

        String cargo = planilla.getCARGO();        

        int departamento = planilla.getDEPARTAMENTO();
        int regional = planilla.getREGIONAL();
        int sucursal = planilla.getSUCURSAL();          
        
        planilla.setSUELDO(salario);      
        
        Double total_incrementos=planilla.getINCREMENTO_SALARIAL();

        double sueldo_con_incremento=(salario+total_incrementos);
        planilla.setSUELDO_CON_INCREMENTO(sueldo_con_incremento);               

        Calendar fechaingreso = new GregorianCalendar();
        if(ingreso!=null)            
        fechaingreso.setTime(ingreso);

        Calendar fecharetiro = new GregorianCalendar();
        if(retiro_fecha!=null)            
        fecharetiro.setTime(retiro_fecha);

        RHH_PLANILLA_PROVISION_EMP_CAB ca = new RHH_PLANILLA_PROVISION_EMP_CAB(con).Buscar(planilla.getID_CABECERA());
        
        Calendar fecha = new GregorianCalendar();
        fecha.set(Calendar.MONTH, ca.getMES()-1);
        fecha.set(Calendar.YEAR, ca.getANO());
        int dias_mes=fecha.getActualMaximum(Calendar.DAY_OF_MONTH);
        planilla.setDIAS_MES(dias_mes);

        double salario_dias_trabajados = sueldo_con_incremento;

        int mes_ingreso = fechaingreso.get(Calendar.MONTH)+1;
        int ano_ingreso = fechaingreso.get(Calendar.YEAR);         
        int total_dias_no_trabajados=0;
        if(mes_ingreso==ca.getMES()&&ano_ingreso==ca.getANO())
        {
            int dia = fechaingreso.get(Calendar.DAY_OF_MONTH);                    
            double descuento = (sueldo_con_incremento/dias_mes)*dia;                    
            salario_dias_trabajados -= descuento;
            total_dias_no_trabajados+=dia;
        }

        int mes_retiro = fecharetiro.get(Calendar.MONTH)+1;
        int ano_retiro = fecharetiro.get(Calendar.YEAR);
        if(mes_retiro==ca.getMES()&&ano_retiro==ca.getANO())
        {
            int dia = fecharetiro.get(Calendar.DAY_OF_MONTH);                    
            int dias_no_trabajados=dias_mes-dia;
            double descuento = (sueldo_con_incremento/dias_mes)*dias_no_trabajados;          
            salario_dias_trabajados -= descuento;
            total_dias_no_trabajados+=dias_no_trabajados;
        }
        int dias_trabajados=dias_mes-total_dias_no_trabajados;
        planilla.setDIAS_TRABAJADOS(dias_trabajados);
        planilla.setSALARIO_DIAS_TRABAJADOS(salario_dias_trabajados);

        long milis1 = fechaingreso.getTimeInMillis();
        long milis2 = fecha.getTimeInMillis();
        long diff = milis2 - milis1;
        long diffDays = diff / (24 * 60 * 60 * 1000);

        int ano = (int) (diffDays/365);
        double Bono_Antiguedad = bono_ant;
        planilla.setBONO_ANTIGUEDAD(Bono_Antiguedad);
        
        double otro_ingreso=planilla.getOTROS_INGRESOS();
        double otro_ingreso_sin_imp=planilla.getOTROS_INGRESOS_NO_IMPONIBLES();
        double total_ganado = sueldo_con_incremento+Bono_Antiguedad+otro_ingreso;
        double total_ganado_no_imponible = total_ganado+otro_ingreso_sin_imp;            
        planilla.setTOTAL_GANADO_NO_IMPONIBLE(total_ganado_no_imponible);            
        planilla.setTOTAL_GANADO(total_ganado);
        
        double montoquincena=quincena;        
        planilla.setMONTO_PAGADO_QUINCENA(montoquincena);
        
        double atrazos = 0.0;
        double faltas = 0.0;
        double sancion = 0.0;           

        planilla.setSANCION(sancion);
        Double descuento_celular = deuda_cel;
        planilla.setDEUDA_CELULAR(descuento_celular);        
        double descuento=planilla.getDEUDA_CELULAR();
        double total_ganado_sin_imp = total_ganado;

        CON_DATOS_EMPRESA datos_empresa = new CON_DATOS_EMPRESA(con).Buscar();
        double porc_largo_plazo = datos_empresa.getPORCENTAJE_LARGO_PLAZO();
        double seguro_largo_plazo=total_ganado_sin_imp*(porc_largo_plazo/100);            
        planilla.setSEGURO_LARGO_PLAZO(seguro_largo_plazo);

        double porc_riesgo_comun = datos_empresa.getPORCENTAJE_RIESGO_COMUN();
        double riesgo_comun=total_ganado_sin_imp*(porc_riesgo_comun/100);            
        planilla.setRIESGO_COMUN(riesgo_comun);

        double porc_afp = datos_empresa.getPORCENTAJE_COMISION_AFP();
        double afp=total_ganado_sin_imp*(porc_afp/100);            
        planilla.setCOMISION_AFP(afp);

        double porc_solidario_asegurado = datos_empresa.getPORCENTAJE_SOLIDARIO();
        double solidario_asegurado=total_ganado_sin_imp*(porc_solidario_asegurado/100);            
        planilla.setSOLIDARIO_ASEGURADO(solidario_asegurado);

        double monto_SNA = datos_empresa.getMONTO_SOLIDARIO_NAC_A();
        double monto_SNB = datos_empresa.getMONTO_SOLIDARIO_NAC_B();
        double monto_SNC = datos_empresa.getMONTO_SOLIDARIO_NAC_C();
        double porc_SNA = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_A();
        double porc_SNB = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_B();
        double porc_SNC = datos_empresa.getPORCENTAJE_SOLIDARIO_NAC_C();

        double solidarion_nacional=0.0;

        if(total_ganado_sin_imp>=monto_SNA && total_ganado_sin_imp<monto_SNB)
        {
            solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
        }
        if(total_ganado_sin_imp>=monto_SNB&&total_ganado_sin_imp<monto_SNC)
        {
            solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
            solidarion_nacional+=(total_ganado_sin_imp-monto_SNB)*(porc_SNB/100);
        }
        if(total_ganado_sin_imp>=monto_SNC)
        {
            solidarion_nacional=(total_ganado_sin_imp-monto_SNA)*(porc_SNA/100);
            solidarion_nacional+=(total_ganado_sin_imp-monto_SNB)*(porc_SNB/100);
            solidarion_nacional+=(total_ganado_sin_imp-monto_SNC)*(porc_SNC/100);
        }

        planilla.setSOLIDARIO_NACIONAL(solidarion_nacional);

        Double total_aporte_laboral = seguro_largo_plazo+riesgo_comun+afp+solidario_asegurado+solidarion_nacional;            
        planilla.setTOTAL_APORTE_LABORAL(total_aporte_laboral);

        double porc_csbp = datos_empresa.getPORCENTAJE_CSBP_SEG_MED();
        double csbp=total_ganado_sin_imp*(porc_csbp/100);            
        planilla.setCSBP(csbp);

        double porc_afp_pro = datos_empresa.getPORCENTAJE_RISEGO_PROFESIONAL();
        double afp_pro=total_ganado_sin_imp*(porc_afp_pro/100);            
        planilla.setRIESGO_PROFESIONAL(afp_pro);

        double porc_aporte_pro = datos_empresa.getPORCENTAJE_APORTE_PRO();
        double aporte_pro=total_ganado_sin_imp*(porc_aporte_pro/100);            
        planilla.setPRO_VIVIENDA(aporte_pro);

        double porc_aporte_solidario = datos_empresa.getPORCENTAJE_SOLIDARIO();
        double aporte_solidario=total_ganado_sin_imp*(porc_aporte_solidario/100);            
        planilla.setAPORTE_SOLIDARIO(aporte_solidario);

        double total_aporte_patronal = csbp+afp_pro+aporte_pro+aporte_solidario;            
        planilla.setTOTAL_APORTE_PATRONAL(total_aporte_patronal);

        double salario_neto_sujeto_imp = total_ganado_sin_imp-total_aporte_laboral;            
        planilla.setSUELDO_NETO_SUJ_IMPUESTOS(salario_neto_sujeto_imp);

        double salariominimo_nal = new RHH_SALARIO_MINIMO(con).salarioActual();
        
        double minimo_moinmp=salariominimo_nal*2;

        if(minimo_moinmp>=salario_neto_sujeto_imp)
            minimo_moinmp=salario_neto_sujeto_imp;            
        planilla.setMINIMO_NO_IMPONIBLE(minimo_moinmp);

        double dif_sujeta_impuestos= salario_neto_sujeto_imp-minimo_moinmp;            
        planilla.setDIFERENCIA_SUJ_IMPUESTOS(dif_sujeta_impuestos);

        double imp_liquidado = dif_sujeta_impuestos*0.13;            
        planilla.setIMPUESTO_LIQUIDADO(imp_liquidado);

        double computo_iva_ddj=computo_iva;
        planilla.setCOMPUTO_IVA_DDJJ(computo_iva_ddj);

        double sobre_dos_salarios_minimos= 0.0;
        if(dif_sujeta_impuestos!=0)
        {
            if(imp_liquidado<(0.13*(salariominimo_nal*2)))
                sobre_dos_salarios_minimos=imp_liquidado;
            else
                sobre_dos_salarios_minimos=(0.13*(salariominimo_nal*2));
        }            
        planilla.setSOBRE_2_SALARIOS_MIN(sobre_dos_salarios_minimos);
                
        double saldo_favor =0.0;
        if((imp_liquidado-computo_iva-sobre_dos_salarios_minimos)<0)
            saldo_favor=0.0;
        else
            saldo_favor=(imp_liquidado-computo_iva-sobre_dos_salarios_minimos);            
        planilla.setSALDO_FAVOR(saldo_favor);

        double saldo_favor_empleado=0.0;
        if(sobre_dos_salarios_minimos>imp_liquidado)
            saldo_favor_empleado=0.0;
        else
        {
            if(sobre_dos_salarios_minimos+computo_iva-imp_liquidado<0)
                saldo_favor_empleado=0.0;
            else
                saldo_favor_empleado=sobre_dos_salarios_minimos+computo_iva-imp_liquidado;
        }            
        planilla.setSALDO_FAVOR_EMPLEADO(saldo_favor_empleado);

        Calendar fecha_anterior = new GregorianCalendar();
        fecha_anterior.add(Calendar.MONTH, -1);
        int ano_anterior=fecha_anterior.get(Calendar.YEAR);
        int mes_anterior=fecha_anterior.get(Calendar.MONTH)+1;
        RHH_PLANILLA_PROVISION_EMPLE planilla_anterior=new RHH_PLANILLA_PROVISION_EMPLE(con).BuscarxUSUARIO(ano_anterior, mes_anterior, id_usuairo);
        double saldo_mes_anterior=0;
        if(planilla_anterior!=null)
            saldo_mes_anterior=planilla_anterior.getSALDO_FAVOR_SIGUIENTE_MES();           
        planilla.setSALDO_MES_ANTERIOR(saldo_mes_anterior);

        CON_MONEDA moneda = new CON_MONEDA();
        moneda.setCon(con);           
        
        planilla.setUFV_MES_PASADO(moneda_inflacionaria_mes_anterior);
        
        planilla.setUFV_MES_ACTUAL(moneda_inflacionaria_actual);

        double actualizacion = ((saldo_mes_anterior/moneda_inflacionaria_mes_anterior)*moneda_inflacionaria_actual)-saldo_mes_anterior;            
        planilla.setACTUALIZACION(actualizacion);

        double sub_total = saldo_mes_anterior+actualizacion;            
        planilla.setSUB_TOTAL(sub_total);

        double saldo_total_a_favor_empleado = saldo_favor_empleado+sub_total;            
        planilla.setSALDO_TOTAL_FAVOR_EMPLEADO(saldo_total_a_favor_empleado);

        double saldo_utilizado=0.0;            
        if(saldo_total_a_favor_empleado>saldo_favor)
            saldo_utilizado=saldo_favor;
        else
            saldo_utilizado=saldo_total_a_favor_empleado;           
        planilla.setSALDO_UTILIZADO(saldo_utilizado);

        double impuesto_retenido_pagar=0.0;            
        if(saldo_total_a_favor_empleado<saldo_favor)
            impuesto_retenido_pagar=saldo_favor-saldo_total_a_favor_empleado;           
        planilla.setIMPUESTO_RETENIDO_PAGAR(impuesto_retenido_pagar);

        double saldo_favor_sigte_mes=0.0;            
        if(saldo_total_a_favor_empleado>saldo_favor)
            saldo_favor_sigte_mes=saldo_total_a_favor_empleado-saldo_utilizado;           
        planilla.setSALDO_FAVOR_SIGUIENTE_MES(saldo_favor_sigte_mes);

        double anticipo=planilla.getANTICIPO();
        
        double total_desc_mes = anticipo+montoquincena+descuento+total_aporte_laboral+impuesto_retenido_pagar;//(falta atraso, faltas, sanciones, deuda celular)
        planilla.setTOTAL_DESC_MES(total_desc_mes);

        double total_liquido_pagable_no_imponible =total_ganado_no_imponible-total_desc_mes;            
        planilla.setTOTAL_LIQUIDO_PAGABLE_IMPO(total_liquido_pagable_no_imponible);

        double total_liquido_pagable =total_ganado-total_desc_mes;            
        planilla.setTOTAL_LIQUIDO_PAGABLE(total_liquido_pagable);                 
        planilla.setID(id_planilla);

        planilla.Modificar();                                            
        
        RHH_PERSONA pers = new RHH_PERSONA(con).BuscarxID_Usuario(planilla.getID_USUARIO());
                
        String LUGAR_EMISION = pers.getLUGAR_EMISION();
        LUGAR_EMISION=LUGAR_EMISION==null?"":LUGAR_EMISION;
        String PRIMER_NOMBRE = pers.getPRIMER_NOMBRE();
        PRIMER_NOMBRE=PRIMER_NOMBRE==null?"":PRIMER_NOMBRE;
        String SEGUNDO_NOMBRE = pers.getSEGUNDO_NOMBRE();
        SEGUNDO_NOMBRE=SEGUNDO_NOMBRE==null?"":SEGUNDO_NOMBRE;
        String PRIMER_APELLIDO = pers.getPRIMER_APELLIDO();
        PRIMER_APELLIDO=PRIMER_APELLIDO==null?"":PRIMER_APELLIDO;
        String SEGUNDO_APELLIDO = pers.getSEGUNDO_APELLIDO();
        SEGUNDO_APELLIDO=SEGUNDO_APELLIDO==null?"":SEGUNDO_APELLIDO;
        String TELEFONO = pers.getTELEFONO();
        TELEFONO=TELEFONO==null?"":TELEFONO;
        String EMAIL = pers.getEMAIL();
        EMAIL=EMAIL==null?"":EMAIL;
        String html="";
        
        html+="<td>"+ci+"</td>";
        html+="<td>"+LUGAR_EMISION+"</td>";
        html+="<td>"+PRIMER_NOMBRE+"</td>";
        html+="<td>"+SEGUNDO_NOMBRE+"</td>";
        html+="<td>"+PRIMER_APELLIDO+"</td>";
        html+="<td>"+SEGUNDO_APELLIDO+"</td>";            
        html+="<td>"+TELEFONO+"</td>";
        html+="<td>"+EMAIL+"</td>";           
        html+="<td><a href='#' onclick='pop_profecion("+ci+");'>VER</a></td>";
        SimpleDateFormat formato = new SimpleDateFormat("dd MMMM yyyy");

        if(planilla.getFECHA_INGRESO_EMPRESAindate()!=null)
            html+="<td>"+formato.format(planilla.getFECHA_INGRESO_EMPRESAindate())+"</td>";
        else
            html+="<td></td>";

        if(planilla.getFECHA_RETIRO_EMPRESAinDate()!=null)
            html+="<td>"+formato.format(planilla.getFECHA_RETIRO_EMPRESAinDate())+"</td>";
        else
            html+="<td></td>";
        html+="<td>"+planilla.getMOTIVO_RETIRO()+"</td>";
        html+="<td>"+planilla.getOBSERVACION_RETIRO()+"</td>";
        html+="<td>"+planilla.getANTIGUEDAD_DIA()+"</td>";
        html+="<td>"+planilla.getANTIGUEDAD_MES()+"</td>";
        html+="<td>"+planilla.getANTIGUEDAD_ANO()+"</td>";
        html+="<td>"+planilla.getCARGO()+"</td>";
        String depto="***";
        if(departamento!=0)
            depto = new RHH_DEPARTAMENTO(con).BuscarXid(departamento).getDESCRIPCION();
        html+="<td>"+depto+"</td>";

        String reg="***";
        if(regional!=0)
            reg = new RHH_REGIONAL(con).BuscarXid(regional).getDESCRIPCION();
        html+="<td>"+reg+"</td>";

        String suc="***";
        if(sucursal!=0)
            suc = new RHH_SUCURSAL(con).BuscarXid(sucursal).getDESCRIPCION();
        html+="<td>"+suc+"</td>";
        html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+salario+"' min='0'/></td>";
        html+="<td>"+total_incrementos+"</td>";                
        html+="<td>"+dias_mes+"</td>";
        html+="<td>"+dias_trabajados+"</td>";                           
        html+="<td>"+sueldo_con_incremento+"</td>";
        html+="<td>"+salario_dias_trabajados+"</td>";
        html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+Bono_Antiguedad+"' min='0'/></td>";
        html+="<td>"+otro_ingreso+"</td>";
        html+="<td>"+otro_ingreso_sin_imp+"</td>";
        html+="<td>"+total_ganado_no_imponible+"</td>";
        html+="<td>"+total_ganado+"</td>";
        html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+montoquincena+"' min='0'/></td>";
        html+="<td>"+anticipo+"</td>";
        html+="<td>"+atrazos+"</td>";
        html+="<td>"+faltas+"</td>";
        html+="<td>"+sancion+"</td>";
        html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+planilla.getDEUDA_CELULAR()+"' min='0'/></td>";
        html+="<td>"+descuento+"</td>";
        html+="<td>"+seguro_largo_plazo+"</td>";
        html+="<td>"+riesgo_comun+"</td>";
        html+="<td>"+afp+"</td>";
        html+="<td>"+solidario_asegurado+"</td>";
        html+="<td>"+solidarion_nacional+"</td>";
        html+="<td>"+total_aporte_laboral+"</td>";
        html+="<td>"+csbp+"</td>";
        html+="<td>"+afp_pro+"</td>";
        html+="<td>"+aporte_pro+"</td>";
        html+="<td>"+aporte_solidario+"</td>";
        html+="<td>"+total_aporte_patronal+"</td>";
        html+="<td>"+salario_neto_sujeto_imp+"</td>";
        html+="<td>"+minimo_moinmp+"</td>";
        html+="<td>"+dif_sujeta_impuestos+"</td>";
        html+="<td>"+imp_liquidado+"</td>";
        html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+computo_iva_ddj+"' min='0'/></td>";
        html+="<td>"+sobre_dos_salarios_minimos+"</td>";
        html+="<td id='saldo_favor'>"+saldo_favor+"</td>";
        html+="<td id='saldo_favor_empleado'>"+planilla.getSALDO_FAVOR_EMPLEADO()+"</td>";                
        html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+saldo_mes_anterior+"' min='0'/></td>";
        html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+moneda_inflacionaria_mes_anterior+"' min='0'/></td>";        
        html+="<td><input type='number' data-id='"+planilla.getID()+"' onblur='mod_final(this);' value='"+moneda_inflacionaria_actual+"' min='0'/></td>";       
        html+="<td>"+actualizacion+"</td>";
        html+="<td>"+sub_total+"</td>";
        html+="<td>"+saldo_total_a_favor_empleado+"</td>";
        html+="<td>"+saldo_utilizado+"</td>";
        html+="<td>"+impuesto_retenido_pagar+"</td>";
        html+="<td>"+saldo_favor_sigte_mes+"</td>";
        html+="<td>"+total_desc_mes+"</td>";
        html+="<td>"+planilla.getTOTAL_RETROACTIVOS()+"</td>";
        html+="<td>"+(total_liquido_pagable_no_imponible-total_liquido_pagable)+"</td>";
        html+="<td>"+total_liquido_pagable+"</td>";                            
        con.commit();
        return html;
    }    
    private String pop_profecion(HttpServletRequest request, Conexion con) throws SQLException {
        String html="<div>PROFECIONES</div><ul>";
        int ci = Integer.parseInt(request.getParameter("ci"));
        List<RHH_PROFESION> prof = new RHH_PROFESION(con).BuscarxUsuario(ci);        
        for(RHH_PROFESION profecion : prof)
        {
            html+="<li>"+profecion.getDESCRIPCION()+"</li>";
        }
        return html+"</ul>";
    }
}
